我有以下实体:
ID | PROPERTY
FOO | A
FOO | Z
JOHN | A
DOE | Z现在,我想按ID对这些实体进行分组,如果存在一个或两个值,则获取属性为'A‘的实体,否则为Z。
因此,输出应为:
FOO | A
JOHN | A
DOE | Z我在考虑groupingBy流方法,但我不知道如何使用什么收集器,如果也不是正确的解决方案:
list.stream()
.collect(Collectors.groupingBy(o -> o.getId(), ? another collector function ?)
.collect(Collectors.toList()));发布于 2020-10-09 19:07:44
试试这个:
entities.stream()
.collect(toMap(YourEntityType::getId,
YourEntityType::getProperty,
(x, y) -> "A".equals(x) ? x : y));更新:
我刚刚注意到@Holger在他的评论中发布了完全相同的东西,而我正在编辑我的答案。不过,这里有两个小区别:
"A".equals(x)更不容易出错,比更安全。如果x为null.,则NPE将导致后者失败
更新2:
既然您想要列表形式的结果,那么此选项应该适用于您:
entities.stream()
.collect(collectingAndThen(
toMap(YourEntityType::getId,
identity(),
(x, y) -> "A".equals(x.getProperty()) ? x : y,
m -> new ArrayList<YourEntityType>(m.values()));https://stackoverflow.com/questions/64278525
复制相似问题