本文主要讲解经常使用的n种代码场景
首先需要知道几个关键的方法
- map(mapToInt,mapToLong,mapToDouble)
- 使用频率: #####
说明 : 将流中的每一个元素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());
- flatMap(T -> Stream)
- 使用频率: ####
说明 : 将流中的每一个元素 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());
- filter(T -> boolean)
- 使用频率: ####
说明 : 筛选出条件为true的元素
例如:
// 获取年龄==5的元素
List<Person> collect = personList.stream().filter(person -> person.getAge() == 5).collect(Collectors.toList());
- anyMatch(T -> boolean),allMatch(T -> boolean),noneMatch(T -> boolean),findAny() , findFirst()
- 使用频率: ####
说明 : 这些方法都是字面意思,用起来很简单
例如:
// 查询集合中年龄是否存在5岁的
boolean anyMatch = personList.stream().anyMatch(person -> person.getAge().equals(5));
- distinct()
- 使用频率: ###
说明 : 去重,equals方法比较两个元素是否相等
// 这里需要说明的是由于Person为对象(引用类型),所以这里如果需要去重,就要自己重写equals方法.
List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
- collect(Collectors.toXXX)
- 使用频率: ######
说明 : 收集流的方法
// 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处理.
** 看完的给个赞吧**
** 看完的给个赞吧**
** 看完的给个赞吧**
网友评论