我是使用lambdas和流的新手。我正在尝试打印一个ArrayList,其中删除了重复项并进行了格式化。我知道下面的工作:在Java中的流中使用printf
list.stream().distinct().forEach(System.out::print);
这将产生ADFJKLXZ或任何随机字符的输出我在列表中。不过,我想什么我的输出看起来像为A,d,F,J,K,L,X,Z
我已经试过这样:
list.stream().distinct().forEach(System.out::printf("%s, ",));
我想我可能还是有一些困惑on :: 为什么上面的代码没有工作,我该如何解决它?
这就说得通了。所以只能在没有参数传递时才能使用::。 –
仅当签名与被调用的方法预期的功能接口类型相匹配时才能使用方法引用。在这种情况下,'forEach'需要一个'Consumer',它只需要一个参数。关于方法引用的任何内容都不传递显式参数,因为方法引用并不等同于实际的方法调用,而只是实现稍后可以调用的功能接口。 – rgettman
实际上,当您使用形式为'System.out :: println'的方法引用时,您已经绑定了一个值,即在'System.out'中找到的'PrintStream'实例,该方法将被调用。所以方法引用最多可以绑定一个值,它总是一个对象,方法最终会调用该对象。另请参阅[“System.out :: println”的等效lambda表达式是什么?](http://stackoverflow.com/a/28025717/2711488) – Holger