猿问

整数类型列表的方法参考

我有如下代码。


List<Integer> parameters = ...


String string = " NOT IN (" + 

    parameters.stream()

              .map(parameter -> parameter.toString())

              .collect(Collectors.joining(",")) 

+ ") ";

我想将参数 -> parameter.toString() lambda 表达式转换为方法引用。


茅侃侃
浏览 161回答 3
3回答

森栏

只需toString在您的类中定义一个方法,例如Parameter,您就可以将其用作流中的方法引用:parameters.stream().map(Parameter::toString).collect(Collectors.joining(","))如果您没有特定的类,并且您正在Integer为列表使用类型,请直接Object::toString按照评论中同事的建议使用。我的回答旨在涵盖一般情况,即使用任何方法处理用户定义类的情况。

慕虎7371278

既然parameters是List<Integer>你可能需要:parameters.stream().map(i&nbsp;->&nbsp;i.toString()).collect(Collectors.joining(","));问题但是,使用引用方法有点问题,因为Integer已经定义了三个称为 的方法toString:toString()&nbsp;它返回一个表示此 Integer 值的 String 对象。static toString(int i)&nbsp;它返回一个表示指定整数的 String 对象。static toString(int i, int radix)&nbsp;它返回第二个参数指定的基数中第一个参数的字符串表示形式。因此,使用如下方法引用将导致:parameters.stream().map(Integer::toString).collect(Collectors.joining(","));不明确的方法引用:来自 Integer 类型的 toString() 和 toString(int) 都符合条件解决方案在这种情况下,您可以使用Number作为其父级的类Integer及其Number::toString完全相同的方法:parameters.stream().map(Number::toString).collect(Collectors.joining(","));

跃然一笑

用这个:List<Integer> parameters = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);&nbsp; &nbsp; String string = parameters.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(Object::toString)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.joining(", ", " NOT IN (", ") "));System.out.println(string);不需要 concat String,Collectors.joining为你做。结果:NOT IN (1, 2, 3, 4, 5, 6, 7, 8)
随时随地看视频慕课网APP

相关分类

Java
我要回答