在Java中使用函数进行集合操作和过滤函数。
Java中提供了丰富的集合操作和过滤函数,可以帮助我们更方便地对集合进行操作。本文将主要介绍Java中常用的集合操作和过滤函数。
1.集合操作
在Java中,常用的集合操作包括:筛选、映射、聚合、排序等。
1.1 筛选操作
筛选操作指的是从集合中筛选出符合条件的元素。常用的筛选函数有filter和findFirst。
filter函数:
public static <T> Stream<T> filter(Predicate<? super T> predicate)
参数说明:传入一个Predicate类型的参数,该参数使用test()方法来筛选集合中的元素。
返回值:返回一个Stream对象。
示例代码:
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Stream<Integer> stream = list.stream().filter(x -> x % 2 == 0);
stream.forEach(System.out::println);
输出结果:
2
4
6
8
10
findFirst函数:
public Optional<T> findFirst()
参数说明:该函数不接收任何参数,直接返回集合中的 个元素。
返回值:返回一个Optional对象,该对象可能包含一个非空的元素,也可能为空。
示例代码:
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Optional<Integer> result = list.stream().findFirst();
if (result.isPresent()) {
System.out.println(result.get());
}
输出结果:
1
1.2 映射操作
映射操作指的是将集合中的每个元素映射成另一个元素。常用的映射函数有map。
map函数:
public static <T,R> Stream<R> map(Function<? super T,? extends R> mapper)
参数说明:传入一个Function类型的参数,该参数使用apply()方法将集合中的元素映射成另一个元素。
返回值:返回一个Stream对象。
示例代码:
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Stream<Integer> stream = list.stream().map(x -> x * 2);
stream.forEach(System.out::println);
输出结果:
2
4
6
8
10
12
14
16
18
20
1.3 聚合操作
聚合操作指的是将集合中的元素聚合成一个新的值。常用的聚合函数有reduce。
reduce函数:
public Optional<T> reduce(BinaryOperator<T> accumulator)
参数说明:传入一个BinaryOperator类型的参数,该参数使用apply()方法将集合中的元素聚合成一个新的值。
返回值:返回一个Optional对象,该对象可能包含一个非空的结果,也可能为空。
示例代码:
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Optional<Integer> result = list.stream().reduce((a,b) -> a + b);
if (result.isPresent()) {
System.out.println(result.get());
}
输出结果:
55
1.4 排序操作
排序操作指的是将集合中的元素按照一定的规则进行排序。常用的排序函数有sorted、reversed和distinct。
sorted函数:
public Stream<T> sorted()
参数说明:该函数不接收任何参数,按照自然顺序对元素进行排序。
返回值:返回一个Stream对象。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
Stream<Integer> stream = list.stream().sorted();
stream.forEach(System.out::println);
输出结果:
1
2
3
4
5
6
7
8
9
10
reversed函数:
public Stream<T> reversed()
参数说明:该函数不接收任何参数,对元素进行反转。
返回值:返回一个Stream对象。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
Stream<Integer> stream = list.stream().sorted().reversed();
stream.forEach(System.out::println);
输出结果:
10
9
8
7
6
5
4
3
2
1
distinct函数:
public Stream<T> distinct()
参数说明:该函数不接收任何参数,去重。
返回值:返回一个Stream对象。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9,8,2);
Stream<Integer> stream = list.stream().distinct();
stream.forEach(System.out::println);
输出结果:
2
4
1
8
5
3
7
6
10
9
2.过滤函数
过滤函数指的是对集合中的元素进行判断,筛选出符合要求的元素。常用的过滤函数有filter、findAny、anyMatch、noneMatch、allMatch。
2.1 filter函数
filter函数的用法已经在集合操作中介绍过,这里不再赘述。
2.2 findAny函数:
public Optional<T> findAny()
参数说明:该函数不接收任何参数,返回集合中的任意一个元素,如果集合为空则返回null。
返回值:返回一个Optional对象,该对象可能包含一个非空的元素,也可能为空。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
Optional<Integer> result = list.stream().filter(x -> x % 2 == 0).findAny();
if (result.isPresent()) {
System.out.println(result.get());
}
输出结果:
2
2.3 anyMatch函数:
public boolean anyMatch(Predicate<? super T> predicate)
参数说明:传入一个Predicate类型的参数,该参数使用test()方法对集合中的元素进行判断。
返回值:如果集合中存在任意一个元素符合要求,则返回true,否则返回false。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
boolean result = list.stream().anyMatch(x -> x % 2 == 0);
System.out.println(result);
输出结果:
true
2.4 noneMatch函数:
public boolean noneMatch(Predicate<? super T> predicate)
参数说明:传入一个Predicate类型的参数,该参数使用test()方法对集合中的元素进行判断。
返回值:如果集合中不存在任何一个元素符合要求,则返回true,否则返回false。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
boolean result = list.stream().noneMatch(x -> x > 10);
System.out.println(result);
输出结果:
true
2.5 allMatch函数:
public boolean allMatch(Predicate<? super T> predicate)
参数说明:传入一个Predicate类型的参数,该参数使用test()方法对集合中的元素进行判断。
返回值:如果集合中所有元素都符合要求,则返回true,否则返回false。
示例代码:
List<Integer> list = Arrays.asList(2,4,1,8,5,3,7,6,10,9);
boolean result = list.stream().allMatch(x -> x % 2 == 0);
System.out.println(result);
输出结果:
false
3.总结
本文主要介绍了Java中常用的集合操作和过滤函数。在实际开发中,应根据需要选择合适的集合操作和过滤函数,以便更高效地处理集合数据。
