如何从对象列表中获得distinct(基于两个属性的distinct)列表。例如,让有一个带有属性名称和价格的对象列表。现在,我如何获得一个具有不同名称或价格的列表。
假设
list<xyz> l1 = getlist(); // getlist will return the list.
public List<xyz> getFilteredList(List<xyz> l1) {
return l1
.stream()
.filter(distinctByKey(xyz::getName))
.filter(distinctByKey(xyz::getPrice))
.collect(Collectors.toList());
}
private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
然后在返回-
n1,p1的price上运行filter
这不是预期的结果。
我喜欢这样的东西,它相当简单和灵活,并且建立在您的示例之上:
public static <T> List<T> distinctList(List<T> list, Function<? super T, ?>... keyExtractors) {
return list
.stream()
.filter(distinctByKeys(keyExtractors))
.collect(Collectors.toList());
}
private static <T> Predicate<T> distinctByKeys(Function<? super T, ?>... keyExtractors) {
final Map<List<?>, Boolean> seen = new ConcurrentHashMap<>();
return t -> {
final List<?> keys = Arrays.stream(keyExtractors)
.map(ke -> ke.apply(t))
.collect(Collectors.toList());
return seen.putIfAbsent(keys, Boolean.TRUE) == null;
};
}
然后可以通过以下方式调用:
final List<Xyz> distinct = distinctList(list, Xyz::getName, Xyz::getPrice)
问题内容: 我如何使用JPA条件API执行以下操作: 使用CriteriaBuilder.countDistinct在一个列/路径上执行此操作很简单,但是如何在两个路径/列上执行此操作? 问题答案: 这是一个较晚的答案:-)尽管我不确定情况是否有所改变。 最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为 伪列 ,然后将其连接到 伪列 上。 但是我不能使用,因为它生成了
假设我有员工数据列表。 使用上面的empList,如何获得两个不同的列表,如年龄
问题内容: 我正在使用jQuery流沙插件。我需要获取单击项的数据ID,并将其传递给Web服务。如何获得data- id属性?我正在使用该方法重新绑定单击事件以进行排序。 问题答案: 要获取属性的内容(如中的),您必须使用 或(如果您使用更新的jQuery> = 1.4.3) 并且后面的部分必须小写,例如将不起作用,但会起作用。
在neo4j中,如何在图形上显示多个属性?例如,如果我需要显示一个人的姓名和出生年份。 当我运行此查询时,它会在neo4j浏览器中以表格格式显示数据。如果我单击图形,它会显示“没有可用的图形视图。您必须返回节点、关系或路径才能看到图形可视化。” 有什么建议吗?
我有一个类具有以下签名: 我想将映射到在单个流中同时包含stringA和stringB的 或: 当然他们都不编译,但你明白了。 编辑: 示例:
假设您有分层数据,并且希望获得单独属性的合并值,那么最优雅的,或者说groovy的方法是什么呢?