Java 将整数流连接到字符串,类型转换问题

Java 将整数流连接到字符串,类型转换问题,java,java-8,java-stream,Java,Java 8,Java Stream,我试图使用流(例如,{1,2,3}->“1,2,3”)将一个int数组连接到一个字符串中,但我不断收到编译错误。int/String类型转换似乎有问题 数组是int[]IntArray={1,2,3,4} String s1 = Arrays.stream(IntArray) .map(String::valueOf) .collect(Collectors.joining(", "));

我试图使用流(例如,
{1,2,3}
->
“1,2,3”
)将一个int数组连接到一个字符串中,但我不断收到编译错误。int/String类型转换似乎有问题

数组是
int[]IntArray={1,2,3,4}

    String s1 = Arrays.stream(IntArray)
                        .map(String::valueOf)
                        .collect(Collectors.joining(", "));
给出一个编译错误:

Error:(20, 68) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to int
将映射行替换为
.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
对于
.map(Object::toString)
,以及
.map(n->Integer.toString(n))
的第一个错误,您需要使用:

int[] intArray = {1, 2, 3, 4};
String s1 = Arrays.stream(intArray)
        .mapToObj(String::valueOf)
        .collect(Collectors.joining(", "));
这里有一个细微的差别,这非常重要:

mapToObj(字符串::valueOf)


我在这里将
IntStream
映射到
,如果您使用常规的
map
方法,那么它只需要
IntUnaryOperator
,因此您必须保持在
int

范围内,流的类型是
IntStream
,因此放入流中的所有值都必须是
int
,这就是为什么会出现第一个错误(因为map函数返回的是
String
)。