测试数据
List<String> list = Arrays.asList("a", "b", "c", "aaa", "bbb", "xxx", "a");List<Integer> numbers = Arrays.asList(6, 3, 4, 7, 5);List<User> users = new ArrayList<>();User u1 = new User();u1.setName("JACK");u1.setAge(20);u1.setSex("boy");User u2 = new User();u2.setName("Lili");u2.setAge(10);u2.setSex("girl");users.add(u1);users.add(u2);
filter
根据给定的条件过滤出符合条件的元素。
List<String> filterList = list.stream().filter(x -> "a".equals(x)).collect(Collectors.toList());System.out.println("filter:" + filterList);//结果:[a]
map
List<String> nameList = users.stream().map(User::getName).collect(Collectors.toList());System.out.println("map:" + nameList);//结果:[JACK, Lili]
sorted
排序
List<Integer> sortNumbers = numbers.stream().sorted().collect(Collectors.toList());System.out.println("sorted:" + sortNumbers);//结果:[3, 4, 5, 6, 7]List<Integer> sortrRverseNumbers = numbers.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());System.out.println(sortrRverseNumbers);//结果:[7, 6, 5, 4, 3]
distinct
去除Stream中的重复元素。
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());System.out.println(distinctList);//结果:[a, b, c, aaa, bbb, xxx]
reduce
对Stream中的元素进行归约操作,可以实现求和、求最大值、求最小值等操作。
//求和:将流中的所有数字相加,初始值为0Integer sum = numbers.stream().reduce(0, (a, b) -> a + b);System.out.println("求和:" + sum);//结果:求和:25
//求乘积Integer cj = numbers.stream().reduce(1, (a, b) -> a * b);System.out.println("求乘积:" + cj);//结果:求乘积:2520
//求最大值Integer maxVal = numbers.stream().reduce(Integer::max).get();System.out.println("最大值:" + maxVal);//结果:最大值:7
//求最小值Integer minVal = numbers.stream().reduce(Integer::min).get();System.out.println("最小值:" + minVal);//结果:最小值:3
limit
限制Stream中元素的数量。
List<Integer> arrList = Arrays.asList(6, 3, 5, 7, 9);List<Integer> limitedNumbers = arrList.stream().limit(3).collect(Collectors.toList());System.out.println("limit:" + limitedNumbers);//结果:limit:[6, 3, 5]
skip
跳过前 n 个元素
List<Integer> skipList = numbers.stream().skip(3).collect(Collectors.toList());System.out.println("skip:" + skipList);//结果:skip:[7, 5]
anyMatch
检查Stream中是否有满足给定条件的元素。
Boolean matchResult = list.stream().anyMatch("aaa"::equals);System.out.println("anyMatch:" + matchResult);//结果:anyMatch:true
allMatch
检查Stream中的所有元素是否都满足给定条件。
Boolean allMatchResult1 = numbers.stream().allMatch(x -> x < 10);System.out.println("allMatch1:" + allMatchResult1);//结果:allMatch1:trueBoolean allMatchResult2 = numbers.stream().allMatch(x -> x < 1);System.out.println("allMatch2:" + allMatchResult2);//结果:allMatch2:false
findFirst
返回Stream流中的第一个元素。
String str = list.stream().findFirst().orElse(null);System.out.println("findfirst:" + str);//结果:findfirst:a
count
返回Stream中的元素数量。
long count = list.stream().count();System.out.println("count:" + count);//结果:count:7
mapToDouble
转为double类型并获取数量之和.
double sumNum = users.stream().mapToDouble(User::getAge).sum();System.out.println("mapToDouble:" + sumNum);//结果:mapToDouble:30.0