public class Thingy {
private DifferentThingy nestedThingy;
public DifferentThingy getNestedThingy() {
return this.nestedThingy;
}
}
public class DifferentThingy {
private String attr;
public String getAttr() {
return this.attr;
}
}
List<Thingy>
基于
attr
那个东西的
DifferentThingy
以下是我目前所尝试的:
private List<Thingy> getUniqueBasedOnDifferentThingyAttr(List<Thingy> originalList) {
List<Thingy> uniqueItems = new ArrayList<Thingy>();
Set<String> encounteredNestedDiffThingyAttrs= new HashSet<String>();
for (Thingy t: originalList) {
String nestedDiffThingyAttr = t.getNestedThingy().getAttr();
if(!encounteredNestedDiffThingyAttrs.contains(nestedDiffThingyAttr)) {
encounteredNestedDiffThingyAttrs.add(nestedDiffThingyAttr);
uniqueItems.add(t);
}
}
return uniqueItems;
}
我想使用一个Java8流和两个getter的lambdas来完成这一操作,这两个getter最终检索用于确定唯一性的属性,但不确定如何实现。当用于比较的属性位于pojo的顶层时,我知道如何做,但当属性嵌套在另一个对象中时,我不知道如何做。
你可以这样做:
originalList.stream()
.collect(Collectors.toMap(thing -> thing.getNestedThingy().getAttr(), p -> p, (p, q) -> p))
.values();
不确定是否最优的方法,虽然,我是在Android,所以不要使用流在日常工作。
UPD
我有一个类似这样的组对象 和如下所示的Item对象
问题内容: 我有这样的角度嵌套对象。有没有办法为嵌套属性过滤它 我只显示父元素,但想按两个元素进行过滤,例如: 问题答案: 是的,如果我正确理解您的示例,则可以。 根据集合的大小,计算迭代所用的集合可能会更好,这样过滤器就不会随着模型的更改而不断地进行操作。 http://jsfiddle.net/suCWn/ 基本上,如果我理解正确,您会执行以下操作:
我有多个嵌套文档doc。嵌套查询工作正常,但它们仍然会返回所有嵌套对象(即整个文档),即使搜索查询只匹配少数嵌套对象。但是,它确实将文档作为一个整体进行过滤。 下面是一个例子: 当在地址中搜索时,理想情况下,我应该只获得带有一个嵌套对象的,但我会获得所有嵌套对象。如何筛选返回的嵌套对象? 示例查询: 该查询的输出是和所有员工,而我只想要。
感谢您的回复 编辑: 我试图计数对象之间指定日期范围内的筛选器内的嵌套对象。在ElasticSearch上这样做可能吗?简单地说,我想查看,客户谁有1个订单或多个订单取决于输入在一个指定的日期。 我知道如何获得客户的每日计数,但如果我想计数在指定日期范围内有1个订单的客户在一组每日报表中怎么办? 我所期望的可能的回应:
问题内容: 我正在尝试基于一些嵌套对象来过滤数组。 输入数组如下所示: 我希望这种情况的输出如下所示: 我正在使用此公式来做到这一点: 输出几乎是好的,但它返回的对象带有所有带有姓氏的对象(最好检查一下小提琴:D),而不是将其删除。我如何改善过滤? 问题答案: 调用之后,您需要将结果通过管道传递到,如下所示: 我在这里假设您不想操纵原始数组。因此,我正在使用Object.assign。