整数类型列表的方法参考

时间:2018-09-27 08:44:56

标签: java string list java-8 java-stream

我有如下代码。

List<Integer> parameters = ...

String string = " NOT IN (" + 
    parameters.stream()
              .map(parameter -> parameter.toString())
              .collect(Collectors.joining(",")) 
+ ") ";

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

3 个答案:

答案 0 :(得分:2)

只需在您的类中定义一个toString方法,例如Parameter,您就可以将其用作流中的方法引用:

parameters.stream().map(Parameter::toString).collect(Collectors.joining(",")) 

如果您没有特定的班级,并且您使用Integer类型作为列表,请直接使用Object::toString,如同事在评论中建议的那样。

我的答案旨在涵盖一般情况,即使用任何方法处理用户定义的类的情况。

答案 1 :(得分:1)

由于parametersList<Integer>,因此您可能需要:

parameters.stream().map(i -> i.toString()).collect(Collectors.joining(","));

问题

但是,由于引用方法Integer定义了三个称为toString的方法,因此存在一些问题:

因此使用如下所示的方法引用将导致:

parameters.stream().map(Integer::toString).collect(Collectors.joining(","));
  

方法参考不明确:Integer类型的toString()和toString(int)均符合条件

解决方案

在这种情况下,可以使用Number的父类Integer及其方法Number::toString,它们的作用完全相同:

parameters.stream().map(Number::toString).collect(Collectors.joining(","));

答案 2 :(得分:0)

使用此:

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);

不需要连接StringCollectors.joining可以为您完成此操作。

结果:

NOT IN (1, 2, 3, 4, 5, 6, 7, 8)