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

Muc*_*haZ 4 java queue lambda java-8 java-stream

我有以下代码:

Queue<Reward> possibleRewards = 
    Stream.of(Reward.values())
          .flatMap(reward -> IntStream.range(0, reward.getOccurencies()).mapToObj(i -> reward))
          .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我需要收集Stream成a 的元素Queue,而不是a List.但是,没有Collectors.toQueue()方法.如何将元素收集到Queue

Era*_*ran 11

您可以使用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
Run Code Online (Sandbox Code Playgroud)