文章目录

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


实体


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

以上新的coinList就是list中每个AllCoinEntity对象的coin字段的值


二、List转map

Map<String, Long> 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<String, Long> collect = coinList.stream().collect(Collectors.toMap(AllCoinEntity::getCoin, AllCoinEntity::getId, (k1, k2) -> k1));

三、排序

  • achievementList:为成绩集合
  • Achievement:成绩实体
  • score分数为BigDecimal类型
List<Achievement> achievement1 = achievementList.stream().sorted(Comparator.comparing(Achievement::getScore)).collect(Collectors.toList());//根据分数排序 -- 顺序

List<Achievement> 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<Integer> 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<String>> list = new ArrayList<>();
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<>();
List<String> 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<String> collect = list.stream().flatMap(Collection::stream).collect(Collectors.toList());
collect.forEach(System.out::println);

结果:
[123, 456, Test, ABCD, noshdfosjf, sfefwemisjfie]

5.2

List<String> list = Lists.newArrayList();
list.add("A,B,C,D,E,F");
list.add("Q1,Q2,Q3,Q4");

List<String> 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<Integer> list = new ArrayList();
list.add(3);
list.add(7);
list.add(3);
List<Integer> list2 = list.stream().filter(v -> v == 7).collect(Collectors.toList());
System.out.println(list2);

结果:
[7]

可参考文章:

  • https://cloud.tencent/developer/article/1187831 Stream(上)
  • https://cloud.tencent/developer/article/1187833 Stream(下)
  • http://www.runoob/java/java8-streams.html 菜鸟教程

更多推荐

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