如何按升序对IntStream进行排序?

时间:2017-05-21 23:01:44

标签: java sorting java-stream

我已将2D int数组转换为Stream:

IntStream dataStream = Arrays.stream(data).flatMapToInt(x -> Arrays.stream(x));

现在,我想按升序对列表进行排序。我试过这个:

dataStream.sorted().collect(Collectors.toList());

但是我得到了编译时错误 error

我对此感到困惑,因为在我看过的例子中,类似的事情没有错误。

2 个答案:

答案 0 :(得分:6)

尝试

dataStream.sorted().boxed().collect(Collectors.toList());

因为collect(Collectors.toList())不适用于IntStream

我还认为,首先要sorted()然后boxed()进行效果调优应该稍微好一些。

IntStream.collect()方法具有以下签名:

<R> R collect(Supplier<R> supplier,
              ObjIntConsumer<R> accumulator,
              BiConsumer<R, R> combiner);

如果您真的想要使用它,您可以:

.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);

正如这里建议的那样:

How do I convert a Java 8 IntStream to a List?

答案 1 :(得分:1)

问题是您尝试将let image = UIImage(...) saveToCameraRoll(image: image) { print("URL: \(String(describing: $0))") } 流转换为列表,但int仅适用于对象流,而不适用于基元流。

在将数据收集到列表中之前,您需要先将数据包装箱:

Collectors.toList