在 Java 语法中 :: 的含义因此,在您的示例中:
在以下代码中 :: 的含义是什么?
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
在以下代码中 :: 的含义是什么?
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
这是方法参考。在 Java 8 中添加。
TreeSet::new
引用 的默认构造函数。TreeSet
通常是指类 中的方法。A::B
B
A
::
称为方法引用。它基本上是对单个方法的引用。即,它通过名称引用现有方法。
Method reference using ::
是一个方便的运营商。
方法引用是属于 Java lambda 表达式的功能之一。方法引用可以用通常的lambda表达式语法格式来表示,为了使其更简单,可以使用运算符。–>
::
例:
public class MethodReferenceExample {
void close() {
System.out.println("Close.");
}
public static void main(String[] args) throws Exception {
MethodReferenceExample referenceObj = new MethodReferenceExample();
try (AutoCloseable ac = referenceObj::close) {
}
}
}
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
正在调用/创建“新”树集。
Contstructor 引用的一个类似示例是:
class Zoo {
private List animalList;
public Zoo(List animalList) {
this.animalList = animalList;
System.out.println("Zoo created.");
}
}
interface ZooFactory {
Zoo getZoo(List animals);
}
public class ConstructorReferenceExample {
public static void main(String[] args) {
//following commented line is lambda expression equivalent
//ZooFactory zooFactory = (List animalList)-> {return new Zoo(animalList);};
ZooFactory zooFactory = Zoo::new;
System.out.println("Ok");
Zoo zoo = zooFactory.getZoo(new ArrayList());
}
}