文章目录
- 实体
- 一、从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
。
什么意思呢,就是说如果k1
和k2
的key
都相同,那么只取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
发布评论