3 回答
TA贡献1810条经验 获得超5个赞
只需toString
在您的类中定义一个方法,例如Parameter
,您就可以将其用作流中的方法引用:
parameters.stream().map(Parameter::toString).collect(Collectors.joining(","))
如果您没有特定的类,并且您正在Integer
为列表使用类型,请直接Object::toString
按照评论中同事的建议使用。
我的回答旨在涵盖一般情况,即使用任何方法处理用户定义类的情况。
TA贡献1802条经验 获得超4个赞
既然parameters
是List<Integer>
你可能需要:
parameters.stream().map(i -> i.toString()).collect(Collectors.joining(","));
问题
但是,使用引用方法有点问题,因为Integer
已经定义了三个称为 的方法toString
:
toString()
它返回一个表示此 Integer 值的 String 对象。static toString(int i)
它返回一个表示指定整数的 String 对象。static toString(int i, int radix)
它返回第二个参数指定的基数中第一个参数的字符串表示形式。
因此,使用如下方法引用将导致:
parameters.stream().map(Integer::toString).collect(Collectors.joining(","));
不明确的方法引用:来自 Integer 类型的 toString() 和 toString(int) 都符合条件
解决方案
在这种情况下,您可以使用Number
作为其父级的类Integer
及其Number::toString
完全相同的方法:
parameters.stream().map(Number::toString).collect(Collectors.joining(","));
TA贡献1826条经验 获得超6个赞
用这个:
List<Integer> parameters = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
String string = parameters.stream()
.map(Object::toString)
.collect(Collectors.joining(", ", " NOT IN (", ") "));
System.out.println(string);
不需要 concat String,Collectors.joining为你做。
结果:
NOT IN (1, 2, 3, 4, 5, 6, 7, 8)
添加回答
举报