Java 8 Stream API: 操作对象的强大工具

57 阅读2分钟

Java 8引入了许多新的特性,其中Stream API是一个强大的工具,能让我们更高效地处理集合和数据流。本文将介绍如何使用Stream API处理对象数据,并提供一些常用操作的示例。

对象的过滤

使用filter()方法,我们可以基于条件过滤对象。以下代码展示了如何过滤出年龄大于等于18岁的所有人:

List<Person> adults = persons.stream()
                             .filter(p -> p.getAge() >= 18)
                             .collect(Collectors.toList());

对象的映射

使用map()方法,我们可以将对象转换为其他类型。以下代码展示了如何将Person对象转换为它们的名字:


List<String> names = persons.stream()
                            .map(Person::getName)
                            .collect(Collectors.toList());

对象的排序

使用sorted()方法,我们可以对对象进行排序。以下代码展示了如何根据年龄对人进行排序:


List<Person> sortedByAge = persons.stream()
                                  .sorted(Comparator.comparingInt(Person::getAge))
                                  .collect(Collectors.toList());

对象的分组

使用Collectors.groupingBy()方法,我们可以根据特定属性将对象分组。以下代码展示了如何根据城市对人进行分组:


Map<String, List<Person>> personsByCity = persons.stream()
                                                 .collect(Collectors.groupingBy(Person::getCity));

对象的去重

为了使用distinct()方法去重,您需要在Person类中覆盖equals()hashCode()方法。以下代码展示了如何去重:


List<Person> uniquePersons = persons.stream()
                                    .distinct()
                                    .collect(Collectors.toList());

对象的分割

使用Collectors.partitioningBy()方法,我们可以根据条件将对象分割成两组。以下代码展示了如何将人分为成年人和未成年人:


Map<Boolean, List<Person>> adultsAndMinors = persons.stream()
                                                    .collect(Collectors.partitioningBy(p -> p.getAge() >= 18));

对象的统计

使用summaryStatistics()方法,我们可以获取对象某个属性的统计数据。以下代码展示了如何获取年龄的统计数据:


IntSummaryStatistics ageSummary = persons.stream()
                                         .mapToInt(Person::getAge)
                                         .summaryStatistics();

对象的并行处理

使用parallelStream()方法,我们可以并行地处理对象。以下代码展示了如何并行地获取人的名字:


List<String> names = persons.parallelStream()
                            .map(Person::getName)
                            .collect(Collectors.toList());