☕ Java 8 新增操作集合的方法
2022-04-11 22:21
537 查看
1.Predicate
Java 8 起为 Collection 集合新增了 一个
removeIf(Predicate filter)方法。
传入 Predicate 对象参数
removeIf(Predicate filter)
,该方法将会批量删除符合 filter 条件的所有元素 。Predicate是函数式接口,因此可以Lambda表达式作为参数
books.removeIf(elem -> ((String) elem).length() < 10); // 所有长度小于 10 的字符串元素都会被删除
实例:
//先定义了 一个 calAllO方法,该方法将会使用 Predicate 判断每个集合元素是否符合特定条件 public static int calAll(Collection books, Predicate p) { int total = 0; for (Object obj : books) { // 使用 Predicate 的 test ()方法判断该对象是否满足 Predicate 指定的条件 if (p.test(obj)) total++; } return total; } // 统计书名中出现"实战" 字符串的图书数量 。 System.out.println(calAll(books, elem -> ((String) elem).contains("实战"))); // 统计书名中出现 "Java" 宇符串的图书数量。 System.out.println(calAll(books, elem -> ((String) elem).contains("Java"))); // 统计书名长度大于 10 的图书数量 。 System.out.println(calAll(books, elem -> ((String) elem).length() > 10));
2. Stream
Stream 是一个通用的流接口,而 IntStream、 LongStream、DoubleStream 则代表元素类型为 int、 long、 double 的流。
这些 API 代表多个支持串行和并行聚合操作的元素。
Java 8 为API提供了对应的 Builder (如,Stream.Builder、IntStream.Builder)来创建相应的流。
独立使用Stream的步骤:
- 使用 Stream 的
builder()
类方法创建相应的 Builder - 重复调用 Builder 的
add()
方法往流中添加多个元素 - 调用 Builder 的 【
build()
】方法获取对应的 Stream - 调用 Stream 的聚合方法
// step 1 IntStream ins = IntStream.builder() .add(10) // step2 .add(2) .add(-4) .build(); // step3 // step 4 // System.out.println("ins中最大值:" + ins.max().getAsInt()); // System.out.println("ins中最小值:" + ins.min().getAsInt()); // System.out.println("ins中元素总和:" + ins.sum()); // System.out.println("ins中元素总数:" + ins.count()); // System.out.println("ins中元素平均值:" + ins.average().getAsDouble()); // System.out.println("ins中所有元素的平方是否大于20: " + ins.allMatch(elem -> elem * elem > 20)); // System.out.println("ins中是否包含任何元素的平方大于20:" + ins.anyMatch(elem -> elem * elem > 20)); // 将 is 映射成一个新 Stream ,新 Stream 的每个元素是原 Stream 元素的 2 倍 +1 IntStream newIns = ins.map(elem -> elem * 2 + 1);
每个Stream只能执行一次, 其余代码需要注释掉。
用流操作集合
// 统计书名中出现"疯狂" 字符串的图书数量 。 System.out.println(books.stream().filter( elem -> ((String) elem).contains("疯狂")).count()); // 统计书名中出现 "Java" 宇符串的图书数量。 System.out.println(books.stream().filter( elem -> ((String) elem).contains("Java")).count()); // 统计书名长度大于 10 的图书数量 。 System.out.println(books.stream().filter( elem->((String) elem).length() > 10).count()); //先调用 Co11ection 对象的 stream ()方法将集合转换为 Stream //再调用 St ream 的 mapToInt ()方法获取原有的 Stream 对应的 IntStream books.stream().mapToInt(elem->((String)elem).length()) .forEach(System.out::println);
相关文章推荐
- java基础—List集合的常规方法操作
- 使用java 8新增Stream操作集合
- 使用Java8新增的Predicate操作集合
- JAVA Spark中的操作集合的方法
- Java_集合操作_遍历集合方法
- [java操作redis数据库] 针对list集合的方法
- Java_集合操作_不同的列表选择不同的遍历方法
- Java_集合操作_asList方法产生的List对象不可改变
- Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质
- 使用Java 8新增的Predicate操作来操作集合
- Java新增的Predicate操作集合
- java数组的去重操作(非集合方法)
- java操作数组和集合方法大全
- laravel5.4.12新增集合操作when方法
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- java基础—Map集合的常见方法操作(java集合八)
- 使用java操作wavecom短信猫来发短信的方法
- JAVA操作Excel的方法
- 操作CSS方法集合
- java中map集合两种遍历方法