mil*_*bos -1 java list java-stream
我想将随机数流转换为列表:
public static void main(String[] args) {
System.out.println(
new Random().ints(10, 0, 20).
collect(Collectors.toList()));
}
Run Code Online (Sandbox Code Playgroud)
但这给出了一个例外
java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)
那么如何在java中将流转换为列表?
Random#ints返回IntStream,而不是 a Stream<Integer>,这是问题所在。
IntStream是一个特殊的类来表示原始ints。但是 Java 中的泛型不支持原语,即没有List<int>. 所以你首先必须让你int的Integers 成为包装类。然后你可以收集到List<Integer>.
只需将其装箱即可。
stream.boxed().toList() // since Java 16
// or
stream.boxed().collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
另请参阅以下文档IntStream#boxed:
返回一个由该流的元素组成的流,每个元素都装箱为一个整数。
为了理解,boxed()大致相当于
stream.mapToObj(x -> Integer.valueOf(x))
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
public static void main(String[] args) {
System.out.println(
new Random()
.ints(10, 0, 20)
.boxed()
.toList());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |