赞
踩
关于Java 8 List
的 stream()
方法,整理了多种流操作方法及其应用场景和代码示例:
在Java 8中,当我们使用List
这类集合时,利用stream()
方法可以非常方便地进行各种高级操作。以下汇总各种用法
filter()
filter()内值判断是否为true,横向筛选List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// 筛选出大于等于8的数字 CSDN-小小野猪
List<Integer> filteredNumbers = numbers.stream()
.filter(n -> n >= 8)
.collect(Collectors.toList());
// 筛选出来等于8的
numbers.stream().filter(item -> 8 == item).collect(Collectors.toList())
// 查询userId等于100的,取第一个值findFirst()
list.stream().filter(item-> 100 == item.getUserId()).findFirst().orElse(null);
// 查询userId不为空的项,然后使用map()方法只取userId
list.stream().filter(item -> StringUtils.isNotEmpty(item.getUserId())).map(user -> user.getUserId()).collect(Collectors.toList());
// filter()里面可以是多个条件,可以是&& ,也可以是||
list.stream().filter(item -> Objects.nonNull(item.getParentId()) && 100 == item.getParentId()).collect(Collectors.toList());
// filter() 后面可以跟forEach循环
list.stream().filter(item -> StringUtils.isEmpty(item.getSjh())).forEach(i -> i.setUserId("000000");
map()
map()内值是获取某个字段属性List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 将所有名字转化为大写 CSDN-小小野猪
List<String> uppercasedNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// map里面可以使用String::toUpperCase 或者 User::getDate
List<String> dateList = list.stream().map(User::getDate).collect(Collectors.toList());
// map里面可以使用String::toUpperCase 或者 User::getDate 或者 item ->item.getDate()
List<String> dateList = list.stream().map(item ->item.getDate()).collect(Collectors.toList());
// map里面可以转换,其中list和list2是同级,后面可以跟接{}来处理逻辑
List<HashMap> resultList = list.stream().map(m -> {
list2.stream().filter(m2 -> Objects.equals(m.get("test"),m2.get("test"))).forEach(m2 -> {
m.put("isEmpty",m2.get("emptyFlag"));
});
return m;
}).collect(Collectors.toList());
collect()
// 将数字列表转换为字符串,用逗号分隔 CSDN-小小野猪
String joinedNumbers = numbers.stream().map(Object::toString).collect(Collectors.joining(", "));
// 使用Collectors.toSet()将列表元素收集到HashSet中 CSDN-小小野猪
Set<Integer> uniqueNumbers = numbers.stream().collect(Collectors.toSet());
// collect() 方法里面拼接Collectors.joining(";")),可以将多个string拼接合并成一个
String collect = (String) strList.stream().collect(Collectors.joining(";"));
anyMatch()
, allMatch()
, noneMatch()
// 任何一个匹配
boolean anyEven = numbers.stream().anyMatch(n -> n % 2 == 0);
// 全部匹配
boolean allPositive = numbers.stream().allMatch(n -> n > 0);
// 未匹配
boolean noZeros = numbers.stream().noneMatch(n -> n == 0);
sorted()
// 升序排序 CSDN-小小野猪
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
// 降序排序 CSDN-小小野猪
List<Integer> reversedNumbers = numbers.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
// 根据User里面的Id 进行排序
List<User> sortedList = list.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
// 根据User里面的Id 进行排序
List<User> sortedList = list.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
forEach()
// for循环
names.forEach(name -> System.out.println("Greeting to " + name));
count()
, distinct()
// 获取数量
long count = numbers.stream()
.count();
// distinct之后在获取集合
List<String> distinctNames = names.stream()
.distinct()
.collect(Collectors.toList());
findAny()
, findFirst()
// 返回任意一个元素
Optional<Integer> anyNumber = numbers.stream().findAny();
// 返回第一个
Optional<String> firstNonEmptyName = names.stream()
.filter(name -> !name.isEmpty())
.findFirst();
mapToInt()
, mapToLong()
, mapToDouble()
// 将value转为Int,获取IntSummaryStatistics
IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("Count: " + stats.getCount());
System.out.println("Sum: " + stats.getSum());
System.out.println("Average: " + stats.getAverage());
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
long sumOfChars = names.stream().mapToInt(String::length).sum();
max()
, min()
// 求出最大值
OptionalInt maxNum = numbers.stream()
.mapToInt(Integer::intValue)
.max();
// 求出最小值
Optional<String> shortestName = names.stream().min(Comparator.comparing(String::length));
peek()
numbers.stream()
.peek(System.out::println) // 在处理数据前先打印每个元素
.filter(n -> n > 5)
.collect(Collectors.toList());
skip()
List<Integer> skippedNumbers = numbers.stream()
.skip(3) // 跳过前三个元素
.collect(Collectors.toList());
toArray()
// 将list转为数组
Integer[] integerArray = numbers.stream().toArray(Integer[]::new);
reduce()
// 求和
int sum = list.stream().collect(Collectors.summingInt(User::getAge))
// 求和
int sum = numbers.stream().reduce(0, Integer::sum);
groupingBy()
LinkedHashMap<Date,List<User>> linkedHashMap = list.stream().collect(Collectors.groupingBy(Staff::getDate, LinkedHashMap::new,Collectors.toList()));
本内容版权归属于CSDN-小小野猪,任何未经授权的复制、转载、传播、贩卖、转赠等均属违法行为,必将追究法律责任!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。