L. *_*ell 2 java printf java-8 java-stream
我是使用 lambda 和流的新手。我正在尝试打印一个已排序并删除重复项并格式化的 ArrayList。我知道以下方法会起作用:
list.stream().distinct().forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
这将产生 ADFJKLXZ 或我列表中的任何随机字符的输出。但是,我希望输出看起来像 A、D、F、J、K、L、X、Z
我已经尝试过这个:
list.stream().distinct().forEach(System.out::printf("%s, ", ));
Run Code Online (Sandbox Code Playgroud)
我想我可能仍然对 :: 为什么上面的代码不起作用以及我该如何修复它有一些困惑?
您试图在传递显式参数时传递方法引用,但这是无法完成的。您可以替换为 lambda 表达式。
list.stream().distinct().forEach(x -> System.out.printf("%s, ", x) );
Run Code Online (Sandbox Code Playgroud)
此 lambda 表达式是Consumer打印后跟逗号和空格的字符。
如果您仍想使用方法引用,请创建您自己的方法来包装调用printf。
public static void printWithCommaSpace(Character c)
{
System.out.printf("%s, ", c);
}
Run Code Online (Sandbox Code Playgroud)
然后:
list.stream().distinct().forEach(YourClass::printWithCommaSpace);
Run Code Online (Sandbox Code Playgroud)