如何将Stream的元素收集到队列中?

时间:2016-11-30 11:11:02

标签: java lambda java-8 queue java-stream

我有以下代码:

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

2 个答案:

答案 0 :(得分:10)

您可以使用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

答案 1 :(得分:1)

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()));