java8新特性之List处理
1.集合中获取指定的一个属性值
List<String> items = li.stream().map(ScdCostChargeItemEntity::getItem).collect(Collectors.toList());
2.集合分组
Map<String, List<T>> yearData = allData.stream().collect(Collectors.groupingBy(T::getYear));
2.集合过滤筛选(单条件):
List<T> filterList = appleList.stream().filter(a -> a.getName().equals("YC")).collect(Collectors.toList());
3.集合过滤筛选(多条件):
List<T> filterList = dayVoList. stream().filter(a -> a.getYEAR().equals(item)).collect(Collectors.toList()) .stream().filter(a -> a.getPrice() != "0" && a.getPrice() != "0.0").collect(Collectors.toList());
4.list集合中的bigdecimal进行求和
List<BigDecimal> list = new ArrayList<>(); BigDecimal decimal = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add); List<ItemRO> items = new ArrayList<>();
BigDecimal money = items.stream().map(ItemRO::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
5.list集合中满足条件的取出放到新的集合对象之中
List<Emp> list5= list.stream().filter(u-> u.getAge() == 8).map(u -> { Emp exportVo = new Emp(); exportVo.setId(u.getId()); exportVo.setAge(u.getAge()); return exportVo; }).collect(Collectors.toList()); list5.forEach(System.out::println);
6.allMatch()方法是Stream API中的一个终端操作,用于检查流中的所有元素是否都满足给定的条件。
/** * anyMatch():匹配到任何一个元素和指定的元素相等,返回 true * 1、多元素取反,任何一个元素不等于 a 的返回 true * 2、单元素取反,因为是单元素只有a,没有不等于 a 的元素,所以不成立返回 false */ private static void anyMatch() { //1、正常匹配,多元素 List<String> strList = ListUtil.toList("a", "b", "c", "d"); boolean a = Optional.ofNullable(strList).orElseGet(ListUtil::toList).stream().anyMatch(obj -> obj.equals("a")); System.out.println("anyMatch()测试多元素结果:" + a); List<Employee> list = Arrays.asList(new Employee(102, "李四", 79, 6666.66, Status.BUSY), new Employee(101, "张三", 18, 9999.99, Status.FREE), new Employee(103, "王五", 28, 3333.33, Status.VOCATION), new Employee(104, "赵六", 8, 7777.77, Status.BUSY), new Employee(105, "赵六2", 5, 7777.77, Status.FREE), new Employee(106, "赵六3", 8, 7777.77, Status.FREE), new Employee(107, "田七", 38, 5555.55, Status.BUSY)); boolean e = list.stream().anyMatch(obj -> Objects.equals( obj.getName(), "李四")); System.out.println("anyMatch()测试多元素结果:" + e); // 2、正常匹配,单元素 List<String> strList2 = ListUtil.toList("a"); boolean b = Optional.ofNullable(strList2).orElseGet(ListUtil::toList).stream().anyMatch(obj -> obj.equals("a")); System.out.println("anyMatch()测试单元素结果:" + b); //1、无论多元素还是单元素,只要匹配到任何一个元素等于 a 的都返回 true //3、取反匹配,多元素 List<String> strList3 = ListUtil.toList("a", "b", "c", "d"); boolean c = Optional.ofNullable(strList3).orElseGet(ListUtil::toList).stream().anyMatch(obj -> !obj.equals("a")); System.out.println("anyMatch()测试取反多元素结果:" + c); //4、取反匹配,单元素 List<String> strList4 = ListUtil.toList("a"); boolean d = Optional.ofNullable(strList4).orElseGet(ListUtil::toList).stream().anyMatch(obj -> !obj.equals("a")); System.out.println("anyMatch()测试取反单元素结果:" + d); }
7.allMatch()方法在需要验证流中的所有元素是否满足某个条件时非常有用。它可以用于筛选、验证和处理流中的元素。
/** * allMatch():匹配到全部元素和指定的元素相等,返回 true * 1、allMatch() 所有元素都等于指定元素返回 true * 2、allMatch() 如果取反,等效于 noneMatch() 所有元素不等于指定元素返回 true */ private static void allMatch() { //1、匹配多元素 List<String> strList = ListUtil.toList("a", "b", "c", "d"); boolean a = Optional.ofNullable(strList).orElseGet(ListUtil::toList).stream().allMatch(obj -> obj.equals("a")); System.out.println("allMatch()测试多元素结果:" + a); //2、匹配单元素 List<String> strList2 = ListUtil.toList("a"); boolean b = Optional.ofNullable(strList2).orElseGet(ListUtil::toList).stream().allMatch(obj -> obj.equals("a")); System.out.println("allMatch()测试单元素结果:" + b); }
8.anyMatch()方法在需要验证流中是否存在至少一个满足条件的元素时非常有用。它可以用于快速判断流中是否包含满足某个条件的元素。
/** * noneMatch():与 allMatch() 效果相反 * 1、noneMatch()所有元素都不等于指定元素返回 true * 2、noneMatch() 如果取反,等效于 allMatch() 所有元素等于指定元素返回 true */ private static void noneMatch() { //1、匹配多元素 List<String> strList = ListUtil.toList("b", "c", "d"); boolean a = Optional.ofNullable(strList).orElseGet(ListUtil::toList).stream().noneMatch(obj -> obj.equals("a")); System.out.println("noneMatch()测试多元素结果:" + a); //2、匹配单元素 List<String> strList2 = ListUtil.toList("a"); boolean b = Optional.ofNullable(strList2).orElseGet(ListUtil::toList).stream().noneMatch(obj -> obj.equals("a")); System.out.println("noneMatch()测试单元素结果:" + b); }
9.reduce方法
/** * reduce 是一个流操作方法,用于将流中的元素按照指定的操作进行归约(reduce)操作,最终得到一个结果。 * * reduce 方法有三种重载形式: */ public static void reduce() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Integer sum = list.stream().reduce(0, (x, y) -> x + y); System.out.println(sum); // 求最大值 Optional<Integer> max = list.stream().reduce(Integer::max); max.ifPresent(System.out::println); // 输出: 5 // 求乘积 Optional<Integer> product = list.stream().reduce((a, b) -> a * b); product.ifPresent(System.out::println); // 输出: 120 Optional<Double> op = emps.stream().map(Employee::getSalary).reduce(Double::sum); System.out.println(op.get()); }
本文来自博客园,作者:黄橙,转载请注明原文链接:https://www.cnblogs.com/RedOrange/p/17091613.html
分类:
java / List
, java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类