我遇到了难以解决Streams API中的问题。那么,从我能说的一个单一的电话中,它是可以解决的,但不是优雅的。下面,我们要获取FeatureContentWeight对象流,按特征和内容进行分组,并根据特征和内容获取最大权重。因为我不需要维护地图,所以我最终从地图中获取了值。问题是,我只想要其中有3项以上的组。因此,我希望特征和内容对的每个特征和内容的最大权重已超过给定的计数。在SQL中,这只是一个简单的HAVING子句。在Streams API中,它看起来并不重要,但我现在只在Streams API上工作了几天。Java 8 Streams API HAVING子句在GroupingBy中等价吗?
任何想法赞赏。
List<FeatureContentWeight> nearestNeighbors = neighborPostings
.stream()
.collect(
groupingBy(
p -> FeatureContent.Create(p.getFeatureId(), p.getContentId()),
collectingAndThen(maxBy(comparingDouble(FeatureContentWeight::getWeight)),Optional::get))).values();
这是很好评论。我同意partitionBy听起来像是满足条件的一个很好的选择。也很高兴看到有人同意在Streams API中使用地图可能有点令人沮丧。我发现自己经常获取条目集或值,然后转换为流等。它变得冗长。同时,我喜欢Streams API,而不是C#Linq,它完全不透明。 – 2014-11-05 19:08:31
@TheOldHag我不知道C#,但我发现Scala的函数转换语法相当不错,无论是列表还是地图。它比Java 8中的冗长,因为它从一开始就被设计成语言,而不是稍后添加,因此没有任何与保留语言中向后兼容性相关的问题。 – 2014-11-05 20:12:14