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());