Java8 Stream流如何操作集合,一文带你了解!
Posted One Tester
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 Stream流如何操作集合,一文带你了解!相关的知识,希望对你有一定的参考价值。
Java8 Stream流如何操作集合,一文带你了解!
一、基本介绍
- 概念:Stream是Java8 API的新成员,它允许以声明性的方式处理数据集合。
- 特点:1.
代码简明
:函数式编程写出的代码简洁且意图明确,是用stream接口让你从此告别for循环。2.多核友好
:Java函数式编程使得编写并运行程序更简单,需要的都是调用方法 - 流程:1.
把集合转换为stream
2.操作stream
:stream流在管道中经过中间操作符的处理,最后由最终操作得到前面处理的结果
二、常用集合操作
-- 取出集合中对象的指定值-不去重
List<String> ageList=userList.stream().map(User::getAge).collect(Collectors.toList());
-- 取出集合中对象的指定值-并去重
List<String> ageDistinct=userList.stream().map(User::getAge).collect(Collectors.toList())
.stream().distinct().collect(Collectors.toList());
-- 取出对象中字段等于指定值的 数据
List<User> age12List=userList.stream().filter(user ->user.getAge().equals("12")).collect(Collectors.toList());
-- 以对象中的指定值分组
Map<String,List<User>> ageMap=userList.stream().collect(Collectors.groupingBy(User::getAge));
-- 以指定字段排序
List<User> sortAscUserList = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
List<User> sortDescUserList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
-- 取出对象指定字段的最大值
int maxAge = userList.stream().mapToInt(user -> Integer.valueOf(user.getAge())).max().getAsInt();
-- List集合中Map对象
List<Map<String,String>> userList=new ArrayList<>();
Map<String,String> user1=new HashMap<>();
user1.put("name","A");user1.put("age","12");userList.add(user1);
Map<String,String> user2=new HashMap<>();
user2.put("name","B");user2.put("age","13");userList.add(user2);
Map<String,String> user3=new HashMap<>();
user3.put("name","B");user3.put("age","12");userList.add(user3);
List<String> ageList=userList.stream().map(user->user.get("age")).collect(Collectors.toList());
三、操作符
Java Stream的操作符可以分为
中间操作符
合终止操作符
两种
3.1 中间操作符
流方法 | 含义 |
---|---|
filter | 用于通过设置的条件过滤元素 |
distinct | 返回一个元素各异(根据元素流所生成元素的hashCode()和equals方法实现)的流 |
limit | 返回一个不超过指定长度的流 |
skip | 返回一个扔掉前n个元素的流 |
sort | 返回排序后的流 |
map | 返回由给定函数应用于此流的元素的结果组成的流 |
-- filter
List<String> list= Arrays.asList("abc","ab","","","fg",null);
List<String> notNullList = list.stream().filter(str -> StringUtils.isNotBlank(str)).collect(Collectors.toList());
System.out.println(notNullList);
--输出[abc, ab, fg]
List<String> containsList = list.stream().filter(str -> StringUtils.isNotBlank(str) && str.contains("a")).collect(Collectors.toList());
System.out.println(containsList);
--输出[abc, ab]
-- distinct
List<String> list= Arrays.asList("abc","ab","ab");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);
--输出[abc, ab]
-- limit
List<String> list= Arrays.asList("abc","ab","ab");
List<String> limitList = list.stream().limit(2).collect(Collectors.toList());
System.out.println(limitList);
--输出[abc, ab]
-- skip
List<String> list= Arrays.asList("abc","ab","ab");
List<String> limitList = list.stream().skip(2).collect(Collectors.toList());
System.out.println(limitList);
-- 输出 [ab]
-- sort
List<String> list= Arrays.asList("1","3","2");
List<String> sortList = list.stream().sorted().collect(Collectors.toList());
System.out.println(sortList);
--输出[1, 2, 3]
-- map
List<String> list= Arrays.asList("abc","ab","ab");
List<String> mapList = list.stream().map(str->"case_"+str).collect(Collectors.toList());
System.out.println(mapList);
--输出[case_abc, case_ab, case_ab]
3.2 终止操作符
流方法 | 含义 |
---|---|
anyMatch | 集合中是否有一个元素满足条件 |
allMatch | 集合中元素是否都满足条件 |
noneMatch | 集合中元素是否都不满足条件 |
findFirst | 返回流的第一个对象的Optional |
collect | 收集器 将流转换为其他形式 |
count | 返回流元素个数 |
-- anyMatch
List<String> list= Arrays.asList("abc","ab","","","fg",null);
boolean flag = list.stream().anyMatch(str -> str == null);
System.out.println(flag);
-- 输出 true
-- allMatch
List<String> list= Arrays.asList("abc","ab","","","fg");
System.out.println(list.stream().allMatch(str -> str != null));
-- 输出 true
-- noneMatch
List<String> list= Arrays.asList("abc","ab","","","fg");
System.out.println(list.stream().noneMatch(str -> str == null));
-- 输出 true
-- findFirst
List<String> list= Arrays.asList("abc","ab","","","fg");
System.out.println(list.stream().findFirst().get());
-- 输出 abc
-- collect
List<String> list= Arrays.asList("abc","ab","","","fg");
List<String> collectList = list.stream().collect(Collectors.toList());
System.out.println(collectList);
-- 输出 [abc, ab, , , fg]
-- count
List<String> list= Arrays.asList("abc","ab","","","fg");
System.out.println(list.stream().count());
-- 输出5
System.out.println(list.stream().filter(str-> StringUtils.isNotBlank(str)).count());
-- 输出3
以上是关于Java8 Stream流如何操作集合,一文带你了解!的主要内容,如果未能解决你的问题,请参考以下文章