【问题标题】: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()));
    

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2018-09-20
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多