具有多个属性的Java流

编程入门 行业动态 更新时间:2024-10-25 12:24:46
本文介绍了具有多个属性的Java流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

流中有以下对象:

class Foo{ String a; String b; int c; }

我想根据以下条件过滤视频流:

I would like to filter a stream based on following criteria:

例如流中有条目:foo1和foo2:

foo1和foo2的a和b值相同,但是c属性不同.

foo1 and foo2 have same values for a and b, but they differ in c property.

在这种情况下,我希望删除那些c更高的条目.

I would like to get rid of entries that have c higher in such case.

推荐答案

在语义上等同于 Eugene的答案,但有点更简单:

Semantically equivalent to Eugene’s answer, but a bit simpler:

List<Foo> foos = Stream.of(new Foo("a", "b", 1), new Foo("a", "b", 2), new Foo("a", "b", 3), new Foo("a", "bb", 3), new Foo("aa", "b", 3)) .collect(Collectors.collectingAndThen( Collectors.toMap(x -> Arrays.asList(x.getA(), x.getB()), x -> x, BinaryOperator.minBy(Comparatorparing(Foo::getC))), map -> new ArrayList<>(map.values())));

您需要按同时具有这两个属性的键进行分组,并且由于缺少标准的Pair类型,因此可以使用具有两个元素的List或Map.Entry,两者都可以工作.但是使用List更简单(在Java 9中,您会使用List.of(…, …)甚至更简单)并且如果两个属性中可能出现相同的值,则哈希码更好.

You need to group by a key holding both properties and due to the absence of a standard Pair type, you may use a List with two elements or a Map.Entry, both work. But using List is simpler (in Java 9, you would use List.of(…, …) which is even simpler) and has a better hash code if the same values may occur in both properties.

当dowstream操作纯粹是简化操作时(例如选择C属性的最小值),toMap收集器更适合,因为它不需要处理Optional.

When the dowstream operation is a pure reduction, like selecting the minimum of the C property, the toMap collector fits better as it doesn’t require dealing with Optional.

更多推荐

具有多个属性的Java流

本文发布于:2023-11-22 03:37:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1615825.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   属性   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!