gpt4 book ai didi

java - 解释 Java 8 收集器接口(interface)/方法签名

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:39 25 4
gpt4 key购买 nike

Stream.collect(Collector<? super T, A, R> collector)

<R,A> R collect(Collector<? super T,A,R> collector)

Performs a mutable reduction operation on the elements of this stream using a Collector.

Collectors.groupingBy​(Function<? super T,​? extends K> classifier)

public static <T,​K> Collector<T,​?,​Map<K,​List<T>>> groupingBy​(Function<? super T,​? extends K> classifier)

Returns a Collector implementing a "group by" operation on input elements of type T, grouping elements according to a classification function, and returning the results in a Map.

有人可以解释一下泛型吗 T , KR ?我真的很困惑这种方法如何符合上面的签名:

List<Student> studentList = ....
Map<String, List<Student>> groupByTeachersMap = studentList.stream()
.collect(Collectors.groupingBy(Student::getTeachersName));

我看不出如何collect可以回Map<String, List<Student>>鉴于上面的签名。有人可以解释如何阅读此签名吗?

最佳答案

假设以下最小类:

class Student {
String teachersName;

public String getTeachersName() {
return teachersName;
}
}

您可以通过在每个步骤中匹配输入和输出的返回类型来关联您的代码。例如,groupingBy 的签名为:

// <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier)       

你的具体实现方式如下:

Collectors.groupingBy(new Function<Student, String>() {
@Override
public String apply(Student student) {
return student.getTeachersName();
}
})

在你的情况下返回

Collector<Student, ?, Map<String, List<Student>>>

此外,如果您查看 collect 操作的签名,即

// <R, A> R collect(Collector<? super T, A, R> collector)

因此在您的情况下返回 R 如下:

Map<String, List<Student>>

关于java - 解释 Java 8 收集器接口(interface)/方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com