欢迎访问宙启技术站
智能推送

如何使用Java中的集合函数进行元素筛选和过滤?

发布时间:2023-06-02 05:14:10

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中集合函数用于元素筛选和过滤的常用方法。使用这些方法可以轻松地对集合中的元素进行操作,提高代码的可读性和可维护性。