如何使用Java中的集合函数进行元素筛选和过滤?
Java中的集合函数提供了丰富的筛选和过滤方法,可用于对集合中的元素进行操作。
1. filter()方法
filter()方法可用于根据给定条件筛选集合中符合条件的元素。该方法的签名如下:
Stream<T> filter(Predicate<? super T> predicate)
其中,Predicate是一个函数接口,用于表示一个条件函数,该函数接受一个参数并返回一个布尔值,表示该元素是否符合条件。
例如,假设有以下的Person类定义:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
现在有一个Person列表,我们想要筛选出年龄大于等于18岁的人,可以使用filter()方法:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 18));
persons.add(new Person("Jerry", 21));
persons.add(new Person("Mike", 16));
List<Person> adults = persons.stream()
.filter(p -> p.getAge() >= 18)
.collect(Collectors.toList());
该示例中,filter()方法中的Lambda表达式p -> p.getAge() >= 18用于表示筛选条件,即年龄大于等于18岁的人。最终结果为一个包含Tom、Jerry的Person列表。
2. map()方法
map()方法可用于对集合中的元素进行映射,即将每个元素转换为另一个元素。该方法的签名如下:
<R> Stream<R> map(Function<? super T,? extends R> mapper)
其中,Function是一个函数接口,用于表示一个转换函数,该函数接受一个参数并返回一个转换后的结果。
例如,假设有一个包含整数的列表,我们想要将每个整数都乘以2,可以使用map()方法:
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
List<Integer> doubled = numbers.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
该示例中,map()方法中的Lambda表达式n -> n * 2用于表示元素的转换函数,将每个元素乘以2。最终结果为一个包含2、4、6的整数列表。
3. distinct()方法
distinct()方法可用于筛选出集合中不重复的元素。该方法的签名如下:
Stream<T> distinct()
例如,假设有一个包含重复元素的列表,我们想要获取该列表中不重复的元素,可以使用distinct()方法:
List<String> names = new ArrayList<>();
names.add("Tom");
names.add("Jerry");
names.add("Tom");
names.add("Mike");
List<String> uniqueNames = names.stream()
.distinct()
.collect(Collectors.toList());
最终结果为一个包含Tom、Jerry、Mike的字符串列表。
4. limit()和skip()方法
limit()方法可用于限制集合中的元素数量,例如获取前n个元素。该方法的签名如下:
Stream<T> limit(long maxSize)
skip()方法可用于跳过集合中的元素数量,例如获取除前n个元素以外的所有元素。该方法的签名如下:
Stream<T> skip(long n)
例如,假设有一个包含10个整数的列表,我们想要获取该列表中的前3个元素和后7个元素,可以使用limit()和skip()方法:
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
List<Integer> subList = numbers.stream()
.limit(3)
.skip(3)
.collect(Collectors.toList());
最终结果为一个包含4、5、6、7、8、9、10的整数列表。
5. sorted()方法
sorted()方法可用于对集合中的元素进行排序。该方法有两个重载版本:
Stream<T> sorted() Stream<T> sorted(Comparator<? super T> comparator)
其中, 个版本使用元素的自然顺序进行排序,第二个版本可接受一个比较器函数,用于指定元素的排序顺序。
例如,假设有一个包含字符串的列表,我们想要将其按字母顺序排序,可以使用sorted()方法:
List<String> words = new ArrayList<>();
words.add("dog");
words.add("cat");
words.add("apple");
List<String> sortedWords = words.stream()
.sorted()
.collect(Collectors.toList());
最终结果为一个包含apple、cat、dog的字符串列表。
以上是Java中集合函数用于元素筛选和过滤的常用方法。使用这些方法可以轻松地对集合中的元素进行操作,提高代码的可读性和可维护性。
