java for循环 怎样把一个list里相同的数据放到一起

例如{1,1,2,3,4,2,1}输出1,1,12,234... 例如 { 1,1,2,3,4,2,1}
输出 1,1,1 2,2 3 4
展开
 我来答
木有芒果
2018-02-23 · 如果你问我是谁~我会说我叫木有芒果~哈哈
木有芒果
采纳数:112 获赞数:595

向TA提问 私信TA
展开全部

通过题主的描述可以看到,其实就是一个List<Integer>的集合数据处理问题,希望把相同的数据放到一起,是一种归类操作,也就是说其实总得需要把List<Integer>形式转化为Map<Integer, List<Integer>>的形式

这种形式map的key也就是当前的这个数字,而这个value就是这个数字对应的所有当前出现此key的集合

List<Integer> list = Arrays.asList(1, 1, 2, 3, 4, 2, 1);
Map<Integer, List<Integer>> map = new HashMap<>();
for (Integer num : list){
    // map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
    if (map.containsKey(num)){
        map.get(num).add(num);
    }else{
    // map不包含此key,则重新创建一个新集合,并把这个数字添加进集合
    // ,再把集合放到map中
        List<Integer> newList = new ArrayList<>();
        newList.add(num);
        map.put(num, newList);
    }
}
System.out.println(map);

输出结果

这只是简单把map打印出来,当然有了这个map,想怎么样输出都是可以的了

额外的,上面的那种写法虽然也还算简单明了,但是对于如今Java8中的流(Stream)操作而言,还是显得太复杂了,而且采用for这种外部循环告诉机器你要怎样循环怎么取值,怎样操作实在繁琐,太过命令式编程,若采用Stream的方式来写上述过程就非常简答了,只需要告诉机器你要做什么就可以了,不用去管怎么循环,只管要什么操作(把JDK升到8即可尝试以下代码)

// 第二种方式Java8 Stream
Map<Integer, List<Integer>> map1 = list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.toList()));
System.out.println(map1);

一行代码就搞定了,这里采用的是Collectors.groupingBy方法进行归类数据,里面两个参数代表分别代表:

  1. 如何把流中的数据进行归类,表示归类的依据,由于是数字本身,所以第一个参数传入Function.identity,就是代表本身的意思,数字相同就归类到一起

  2. 第二个参数是代表,把归类到一起的数字怎么合到一起,Collectors.toList代表就是把数字归类成集合,所以返回的就是Map<Integer, List<Integer>>,这正好是我们要的结果

由于Collectors.groupingBy默认是按照Collectors.toList的方式进行归类的,所以上面的代码还可以再减少一个参数,写为

// 第二种方式Java8 Stream
Map<Integer, List<Integer>> map1 = list.stream().collect(Collectors.groupingBy(Function.identity()));
System.out.println(map1);

结果为

结果也是一样的,题主可以自行选择

liuyang054
推荐于2017-09-26 · TA获得超过9093个赞
知道大有可为答主
回答量:5317
采纳率:78%
帮助的人:5262万
展开全部

对这个list里面的数据排序一下就行了啊 

import java.util.ArrayList;
import java.util.List;
//import java.util.Scanner;

public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(12);
list.add(15);
list.add(1);
list.add(15);
list.add(12);
list.add(1);
list.add(12);
System.out.println("输入未排序的集合:");
for(int i = 0; i < list.size(); i++){
System.out.print(list.get(i) + "  ");
}
// 冒泡排序
for (int k = 0; k < list.size() - 1; k++) {
for (int j = k + 1; j < list.size(); j++) { // 升序把<改成>
if (list.get(k) > list.get(j)) {
int temp = list.get(k);
list.set(k, list.get(j));
list.set(j, temp);
}
}
}
System.out.println("\n输入排序后的集合:");
for(int i = 0; i < list.size(); i++){
System.out.print(list.get(i) + "  ");
}
}
}

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
育知同创教育
2016-03-10 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

java for循环查找list中的相同数据的方法:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class FindDuplicate {

    public static void main(String[] args) {

        // 初始化list
        List<String> list = new ArrayList<String>();
        list.add("Jhon");
        list.add("Jency");
        list.add("Mike");
        list.add("Dmitri");
        list.add("Mike");

        // 利用set不允许元素重复的性质去掉相同的元素
        Set<String> checkDuplicates = new HashSet<String>();
        for (int i = 0; i < list.size(); i++) {
            String items = list.get(i);
            if (!checkDuplicates.add(items)) {
                // 打印重复的元素
                System.out.println("Duplicate in that list " + items);
            }
        }

    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-04
展开全部


import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class YuGiOh
{
public static void main ( String[] args )
{
List<Integer> stooges = Arrays.asList (1, 1, 2, 3, 4, 2, 1);
System.out.println (stooges);
Collections.sort (stooges);
System.out.println (stooges);
}
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hardneedl
2018-02-23 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:602万
展开全部
import java.util.*;
import java.util.stream.*;
/**使用 jdk8 stream
 * @author hardneedl
 */
final class GroupingDemo {
    public static void main(String... args) {
        //准备原始数据内容
        Stream<Integer> numstream = Stream.of(1,1,2,3,4,2,1);

        //分组
        Map<Integer, List<Integer>> groups = numstream.collect(
            Collectors.groupingBy(
                t -> t
            )
        );

        //这里暂时先打印分组后的结果
        System.out.println(groups);

    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式