Java8 Stream流的简单使用

2020-02-28  本文已影响0人  Charon笔记

本文主要讲解经常使用的n种代码场景

首先需要知道几个关键的方法

说明 : 将流中的每一个元素T转换成R

例如:

// 获取集合中对象所有的姓名(处理数据应该经常用到)
List<String> collect = personList.stream().map(Person::getName).collect(Collectors.toList());
//如果要去重可以接着使用distinct()
List<String> collect = personList.stream().map(Person::getName).distinct().collect(Collectors.toList());

说明 : 将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流,有人解释成切片.

例如:

//集合中还是集合,但是我想要合并成一个集合
List<List<Person>> list = new ArrayList<>();
List<Person> collect = list.stream().flatMap(people -> people.stream()).collect(Collectors.toList());
//集合中对字符串处理之后合并成一个集合
List<String> list = new ArrayList();
list.add("1,2,3");
list.add("4,5,6");
list.add("7,8");
List<String> collect = list.stream().flatMap(str -> Arrays.stream(str.split(","))).collect(Collectors.toList());

说明 : 筛选出条件为true的元素

例如:

// 获取年龄==5的元素
List<Person> collect = personList.stream().filter(person -> person.getAge() == 5).collect(Collectors.toList());

说明 : 这些方法都是字面意思,用起来很简单
例如:

// 查询集合中年龄是否存在5岁的
boolean anyMatch = personList.stream().anyMatch(person -> person.getAge().equals(5));

说明 : 去重,equals方法比较两个元素是否相等

// 这里需要说明的是由于Person为对象(引用类型),所以这里如果需要去重,就要自己重写equals方法.
List<Person> collect = personList.stream().distinct().collect(Collectors.toList());

说明 : 收集流的方法

// personList.stream().distinct()这里处理完之后返回的还是流对象,我们需要转换成集合的话就要使用.
List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
//集合转成map对象的使用, 第一个为key,后面是value,第三个参数当key冲突的时候是保留前者还是保留后者,如果不处理的话,当key冲突时会报异常.
Map<Integer, String> collect = personList.stream().collect(Collectors.toMap(person -> person.getAge(), person -> person.getName(), (p1, p2) -> p1));

Stream大大的简化了我们日常代码的行数,方便了使用,另外还可以减少数据库的sql分组,limit处理.

                                                          ** 看完的给个赞吧**
                                                          ** 看完的给个赞吧**
                                                          ** 看完的给个赞吧**
上一篇下一篇

猜你喜欢

热点阅读