2017-05-21 36 views
1

我已经转换一个二维int数组到流:如何按升序对IntStream进行排序?

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

现在,我要对列表进行排序升序排列。我已经试过这样:

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

但我得到的编译时错误 error

我感到困惑这一点,因为在例子我见过,类似的事情都没有错误完成。

回答

5

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

的问题是你正试图转换一个int流到列表,但Collectors.toList只适用于对象流,不适用于基元流。

你需要收集入名单前框数组:

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

相关问题