将int的流加入String,类型转换问题

use*_*559 5 java java-8 java-stream

我正在尝试使用流(例如{1, 2, 3}- > "1, 2, 3")将一个int数组连接到一个String中,但是我一直在收到编译错误.int/String类型转换似乎存在问题.

阵列是int[] IntArray = {1, 2, 3, 4}.

    String s1 = Arrays.stream(IntArray)
                        .map(String::valueOf)
                        .collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

Error:(20, 68) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to int
Run Code Online (Sandbox Code Playgroud)

使用.map(Object::toString)或替换地图线代替.map(n -> Integer.toString(n)):

Error:(23, 49) java: incompatible types: invalid method reference
method toString in class java.lang.Object cannot be applied to given types
required: no arguments
found: int
reason: actual and formal argument lists differ in length
Run Code Online (Sandbox Code Playgroud)

for .map(Object::toString),和第一个错误.map(n -> Integer.toString(n)).

ski*_*iwi 11

你需要使用:

int[] intArray = {1, 2, 3, 4};
String s1 = Arrays.stream(intArray)
        .mapToObj(String::valueOf)
        .collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

这里有一个微妙的区别,这非常重要:

mapToObj(String::valueOf)

我将地图映射IntStreamStream<String>这里,如果你使用常规map方法,那么它只需要一个IntUnaryOperator,因此你必须留在里面int.