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

时间:2014-03-20 12:58:49

标签: 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(", "));

给出了编译错误:

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))的第一个错误。

1 个答案:

答案 0 :(得分:11)

您需要使用:

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

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

mapToObj(String::valueOf)

我在这里将IntStream映射到Stream<String>,如果您使用常规的map方法,那么它只需IntUnaryOperator,因此您必须留在int内{{1}} 1}}。