我是 java 8 stream api 的新手,我正在寻找一种解决方案来运行我的对象列表并聚合某些属性,以便最终能够获得该属性类型的新列表和所有聚合结果。
例如我的列表中有 10 个人物,我想要一个基于第一人称年龄的所有年龄差异的列表
即使在 java 中也可以使用流吗?
例如:
person1.age = 10
person2.age = 12
person3.age = 20
person4.age = 25
person5.age = 30
在执行流魔术之后,结果应该是 int 类型并且看起来像这样
0
2 //based on first age 12 - 10
10 // based on first age 20 - 10
15 // ...
20
最佳答案
我假设您有一个名为 Person
的类,上面有一个 getAge()
getter。然后你可以这样做:
list.stream()
.skip(1)
.map(Person::getAge)
.map(age -> age - list.get(0).getAge())
.map(Math::abs)
.forEach(System.out::println);
.skip(1)
- 从列表中跳过第一个人,因此结果不会包含通过比较第一个人的年龄与他们自己的年龄而产生的 0。
.map(Math::abs)
- 取绝对值,因为“差异”始终为正(无论我有 10 年而你有 20 年,还是我有 20 年而你有 10 年,相差 10)。
您可能想要添加 .distinct()
以删除重复项。
最后,您可能想要使用不同的终端操作 - 例如.collect(toList())
,而不是打印。
关于Java 8 Stream——聚合和返回聚合步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42625711/