为了账号安全,请及时绑定邮箱和手机立即绑定

整数类型列表的方法参考

整数类型列表的方法参考

茅侃侃 2021-10-13 16:50:04
我有如下代码。List<Integer> parameters = ...String string = " NOT IN (" +     parameters.stream()              .map(parameter -> parameter.toString())              .collect(Collectors.joining(",")) + ") ";我想将参数 -> parameter.toString() lambda 表达式转换为方法引用。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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

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

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

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


查看完整回答
反对 回复 2021-10-13
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

既然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(","));


查看完整回答
反对 回复 2021-10-13
?
跃然一笑

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)


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信