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

展开全部

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

这种形式map的key也就是当前的这个数字,而这个value就是这个数字对应的所有当前出现此key的集合List list = Arrays.asList(1, 1, 2, 3, 4, 2, 1);

Map> map = new HashMap<>();

for (Integer num : list){

// map是否包含此key,若已经包含则添加一个新的数字到对应value集合中

if (map.containsKey(num)){

map.get(num).add(num);

}else{

// map不包含此key,则重新创建一个新集合,并把这个数字添加进集合

// ,再把集合放到map中

List newList = new ArrayList<>();

newList.add(num);

map.put(num, newList);

}

}

System.out.println(map);

输出结果

a6386f0c03b80221039bf31bbdfe0139.png

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

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

Map> map1 = list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.toList()));

System.out.println(map1);

一行代码就搞定了,这里采用的是Collectors.groupingBy方法进行归类数据,里面两个参数代表分别代表:如何把流中的数据进行归类,表示归类的依据,由于是数字本身,所以第一个参数传入Function.identity,就是代表本身的意思,数字相同就归类到一起

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

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

Map> map1 = list.stream().collect(Collectors.groupingBy(Function.identity()));

System.out.println(map1);

结果为

7b1fc8369fc777745ec0e94f311b697a.png

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值