【问题标题】:How to collect the elements of a Stream into a Queue? [duplicate]如何将 Stream 的元素收集到队列中? [复制]
【发布时间】:2016-11-30 11:11:02
【问题描述】:
我有以下代码:
Queue<Reward> possibleRewards =
Stream.of(Reward.values())
.flatMap(reward -> IntStream.range(0, reward.getOccurencies()).mapToObj(i -> reward))
.collect(Collectors.toList());
如您所见,我需要将Stream 的元素收集到Queue,而不是List。但是,没有 Collectors.toQueue() 方法。如何将元素收集到Queue?
【问题讨论】:
标签:
java
lambda
java-8
queue
java-stream
【解决方案1】:
您可以使用Collectors.toCollection(),它可以让您选择您希望生成的任何Collection 实现:
Queue<Reward> possibleRewards =
Stream.of(Reward.values())
.flatMap(reward -> IntStream.range(0, reward.getOccurencies()).mapToObj(i -> reward))
.collect(Collectors.toCollection(PriorityQueue::new)); // use whatever Queue
// implementation you want
【解决方案2】:
Queue<Reward> possibleRewards = new LinkedBlockingQueue<>(); //Or whichever type of queue you would like
possibleRewards.addAll(Stream.of(Reward.values())
.flatMap(reward -> IntStream.range(0, reward.getOccurencies()).mapToObj(i -> reward))
.collect(Collectors.toList()));