Java 8中运算符"::"(双冒号)是什么意思?
大家好!我正在学习Java 8,遇到了一个奇怪的语法——双冒号"::"。我在lambda表达式的示例中见过它,但我不明白它具体做什么以及何时使用。
例如,我知道如何编写lambda来按长度过滤字符串列表:
List list = Arrays.asList("a", "bb", "ccc");
list.stream().filter(s -> s.length() > 1).forEach(s -> System.out.println(s));
但后来我看到了这样的代码:
list.stream().filter(s -> s.length() > 1).forEach(System.out::println);
这里用`System.out::println`代替了`s -> System.out.println(s)`。这是什么魔法?它们是一样的吗?为什么不能直接使用lambda?以及如何理解何时可以用`::`,何时不能用?你能用简单的语言和例子解释一下吗?
我还见过这些变体:
list.stream().map(String::toUpperCase)
list.stream().sorted(String::compareToIgnoreCase)
这是怎么