作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Parcelle 类,它具有三个属性 num 和 nature 以及 autre_nature。和 Parcelle listParcelles 列表。我正在体验 Java 8 Streams,我想要实现的是按 num 分组并返回 Parcelle ,它同时具有非 null nature 和 autre_nature 属性,否则只从组中随机返回一个 Parcelle。
Example :
Input:
ligneParcelles[[num=1,nature=TC,autre_nature=TCC],
[num=1,nature=TC,autre_nature=null],
[num=2,nature=TC,autre_nature=null],
[num=3,nature=TC,autre_nature=null],
[num=3,nature=Alpha,autre_nature=null],
[num=4,nature=TC,autre_nature=TC]
[num=4,nature=TC,autre_nature=null]]
Output :
ligneParcelles [[num=1,nature=TC,autre_nature=TCC],
[num=2,nature=TC,autre_nature=null],
[num=3,nature=Alpha,autre_nature=null],
[num=4,nature=TC,autre_nature=TC]]
为了分组,我使用了以下代码:
Map<String, List<Parcelle>> mapLignesParcelles = listParcelles.stream()
.collect(Collectors.groupingBy(lp->lp.getNum()+""));
但我不确定要使用什么来获得最终结果,我可以流式传输 mapLignesParcelles 键集并且我想到了带有谓词的任何匹配 lp.getNature()!=null && lp.getAutre_Nature() !=null
但当谓词不成立时,我如何表达返回任何元素的事实?
最佳答案
您似乎在寻找每个 Num
的映射到一个Parcelle
形式为 Map<String, Parcelle>
而不是 List
如 groupingBy
.一种方法是使用 toMap
同时收集为:
Map<String, Parcelle> output = listParcelles.stream()
.collect(Collectors.toMap(a -> a.getNum() + "", a -> a,
(parcelle1, parcelle2) -> parcelle1.getNature() != null
&& parcelle1.getAutre_nature() != null ? parcelle1 : parcelle2));
另一个来自分组之前的方式可能是:
Map<String, Parcelle> output = mapLignesParcelles.entrySet().stream()
.map(e -> new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue()
.stream()
.filter(lp -> lp.getNature() != null && lp.getAutre_nature() != null)
.findAny()
.orElse(e.getValue().get(new Random().nextInt(e.getValue().size())))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
关于java - 在映射键集流上应用带有 anyMatch() 的谓词,并在谓词为假时返回一些结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258677/
我是一名优秀的程序员,十分优秀!