我有一个具有三个属性num和自然和autre_nature的类Parcelle。和一个列表Parcelle listParelles。我正在体验Java8流,我想实现的是按num分组并返回同时具有非空性质和autre_nature属性的Parcelle,否则只需从组中随机返回一个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()+""));
但我不确定要使用什么来获得最终结果,我可以流式处理mapliginesparcelles键集,并且我想到了使用谓词lp的任何匹配。getNature()=无效的
stream
.filter(yourCondition)
.findFirst()
.orElse(randomlySelectedObject);
您有一个stream
,您可以根据您的条件对其进行筛选,您可以尝试获取与条件匹配的第一个元素,如果找到,则返回它,否则返回随机选择对象
。
您似乎在寻找每个Num
到单个Parcelle
的映射,其形式为Map
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));
如何将侦听器设置为一个映射,该映射的键有一个复杂的对象,并且我只想侦听具有特定键参数值的条目发生的更改。 例如,我有一个类似于此的代码: 但当一个包含“EN”语言的键的条目被更新时,我的回调函数不会被调用。所以我假设我的谓词是错误的。
我有一个Hazelcast地图的HashMap作为我下面所示的值。 我想使用谓词/SQLPredicate执行查询。我该怎么做? 请帮帮我。
我正在尝试构建一个方法,删除具有非空属性的条目,但我一直在谓词中失败,我不知道如何正确实现谓词,因为hazelcast没有将“Not NULL”或“IS NULL”作为where子句任何想法如何在映射中找到我需要搜索以删除它们的值? 方法 主类响应SerializablePlus
我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并
我是Hazelcast的新手-评估和原型设计,看看它是否适合我们的分布式内存缓存需求。其中一个要求是能够使用通配符在给定地图中搜索关键字。通过查看IMap文档,可以使用keySet(谓词谓词)。但我不知道如何使用谓词,在给定通配符字符串的情况下,返回一个包含所有匹配键的键集。举个例子会很有帮助。 我的代码片段。这是客户端。 谢谢
下面的lexer语法片段应该根据类中定义的谓词来标记“自定义名称”: CUSTOM_NAME的正确匹配总是尽可能长的匹配。现在,如果lexer遇到一个自定义名称,比如,那么我希望它对整个字符串,然后用'some:cname'作为参数调用一次谓词。 编辑:这种行为的有趣之处在于,只要将部分匹配传递给谓词,谓词的结果似乎完全被lexer忽略了。这似乎效率很低。