您当前的位置: 首页 >  慌途L

Stream流 | List<List>转成一个List(flatMap)、List转Map(同时防止key重复)、List排序、求和、过滤filter

慌途L 发布时间:2019-01-25 23:49:06 ,浏览量:3

文章目录
    • 实体
    • 一、从List 对象获取单个对象的某个字段的值
      • 以上新的coinList就是list中每个AllCoinEntity对象的coin字段的值
    • 二、List转map
    • 三、排序
    • 四、求和
      • BigDecimal:
        • int、double、long:
      • Integer
    • 五、List转成一个List(flatMap)
      • 5.1
      • 5.2
    • 五、过滤filter
    • 可参考文章:

实体

在这里插入图片描述

一、从List 对象获取单个对象的某个字段的值

在这里插入图片描述

以上新的coinList就是list中每个AllCoinEntity对象的coin字段的值 二、List转map
Map collect = coinList.stream().collect(Collectors.toMap(AllCoinEntity::getCoin, AllCoinEntity::getId));

得到的map即是以coin为key,主键id为value的map对象

防止key重复

一般toMap时只用到两个参数,第一个设定Key,第二个设定value。但如果Key重复的话,那就需要用到第三个参数,可以这么写(k1, k2)-> k1。 什么意思呢,就是说如果k1k2key都相同,那么只取k1的值去覆盖之前的值,也可以改为取k2的值,这样就解决了duplicate key的问题

Map collect = coinList.stream().collect(Collectors.toMap(AllCoinEntity::getCoin, AllCoinEntity::getId, (k1, k2) -> k1));
三、排序
  • achievementList:为成绩集合
  • Achievement:成绩实体
  • score分数为BigDecimal类型
List achievement1 = achievementList.stream().sorted(Comparator.comparing(Achievement::getScore)).collect(Collectors.toList());//根据分数排序 -- 顺序

List achievement2 = achievementList.stream().sorted(Comparator.comparing(Achievement::getScore).reversed()).collect(Collectors.toList());//根据分数排序 -- 倒序

注意:如果getScore方法里面有空值,需提前判断并设置为"",不然会包空指针异常

四、求和 BigDecimal:
BigDecimal bigDecimal = list.stream().map(Product::getPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
int、double、long:
int ageSum = list.stream().mapToInt(User::getAge).sum();
Integer
List list = new ArrayList();
list.add(3);
list.add(7);
list.add(2);
IntSummaryStatistics collect = list.stream().collect(Collectors.summarizingInt(value -> value));
System.out.println(collect);

输出:
IntSummaryStatistics{count=3, sum=12, min=2, average=4.000000, max=7}
五、List转成一个List(flatMap) 5.1
List list = new ArrayList();
List list2 = new ArrayList();
List list3 = new ArrayList();
List list4 = new ArrayList();
list2.add("123");
list2.add("456");
list3.add("Test");
list3.add("ABCD");
list4.add("noshdfosjf");
list4.add("sfefwemisjfie");

list.add(list2);
list.add(list3);
list.add(list4);
List collect = list.stream().flatMap(Collection::stream).collect(Collectors.toList());
collect.forEach(System.out::println);

结果:
[123, 456, Test, ABCD, noshdfosjf, sfefwemisjfie]
5.2
List list = Lists.newArrayList();
list.add("A,B,C,D,E,F");
list.add("Q1,Q2,Q3,Q4");

List list2 = list.stream().map(s -> s.split(",")).flatMap(Arrays::stream).collect(Collectors.toList());
System.out.println(list2);

结果:
[A, B, C, D, E, F, Q1, Q2, Q3, Q4]
五、过滤filter

filter方法中的条件为true,则代表当前元素会保留下来

List list = new ArrayList();
list.add(3);
list.add(7);
list.add(3);
List list2 = list.stream().filter(v -> v == 7).collect(Collectors.toList());
System.out.println(list2);

结果:
[7]
可参考文章:
  • https://cloud.tencent.com/developer/article/1187831 Stream(上)
  • https://cloud.tencent.com/developer/article/1187833 Stream(下)
  • http://www.runoob.com/java/java8-streams.html 菜鸟教程
关注
打赏
1688896170
查看更多评论

慌途L

暂无认证

  • 3浏览

    0关注

    118博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0971s