我第一次尝试使用Java 8流…
我有一个对象Bid,它表示用户对拍卖项目的出价。我有一个投标清单,我想制作一张地图,计算出用户投标的拍卖次数(不同)。
这是我的看法:
bids.stream()
.collect(
Collectors.groupingBy(
bid -> Bid::getBidderUserId,
mapping(Bid::getAuctionId, Collectors.toSet())
)
).entrySet().stream().collect(Collectors.toMap(
e-> e.getKey(),e -> e.getValue().size())
);
它有效,但是我感觉自己在作弊,因为我流式传输了地图的条目集,而不是在初始流上进行了操作……这一定是更正确的方法,但是我无法确定出来…
谢谢
您可以执行groupingBy
两次:
Map<Integer, Map<Integer, Long>> map = bids.stream().collect(
groupingBy(Bid::getBidderUserId,
groupingBy(Bid::getAuctionId, counting())));
这样,您就可以确定每个用户在每次拍卖中有多少个出价。因此,内部地图的大小就是用户参与的拍卖次数。如果您不需要其他信息,可以执行以下操作:
Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
Bid::getBidderUserId,
collectingAndThen(
groupingBy(Bid::getAuctionId, counting()),
Map::size)));
这正是您所需要的:将用户映射到参与的拍卖数量。
更新: 还有一个更接近您的示例的类似解决方案:
Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
Bid::getBidderUserId,
collectingAndThen(
mapping(Bid::getAuctionId, toSet()),
Set::size)));
我有一个对象出价,它代表一个用户在拍卖中对一个物品的出价。我有一个出价的列表,我想做一个地图,计算在多少(不同的)拍卖的用户作出一个出价。 这是我的看法: 它起作用了,但我觉得我在作弊,因为我流式处理地图的入口集,而不是对初始流进行操作...一定是个更正确的方法,但我想不出来...
我正在从文件中读取值并获取列表。如下- 一旦我得到这个
假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?
我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。
我正在用Java8为一个文件编写一个解析器。使用读取该文件,并返回一个顺序的。 每一行都映射到一个数据对象,如下所示: 现在我们可以将流中的每一行映射到相应的结果: 但是,流现在包含要删除的值: 如我在中所知,如果需要结果,我如何组合映射/筛选操作?
这是我现在的代码。 我的同事使用Java流API编写了非常好的代码。我试图将其重写为一个流语句,但我被卡住了。 我该怎么做?理想情况下,我想要一个单一的流媒体声明。。。