3VY*_*z7t 1 java java-8 java-stream
在以下代码段中:
public class IDMapBase<T> extends HashMap<DeviceID, T> {
public Map<DeviceID, T> filterMap(Set<DeviceID> neededIDs) {
return entrySet().stream()
.filter(e -> neededIDs.contains(e.getKey()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
}
}
Run Code Online (Sandbox Code Playgroud)
为什么简单地说Entry::getXX而不是Entry<DeviceID, T>>::getXX?我认为这(Map.)Entry将默认为Entry<Object, Object>,它不能用作a的条目Map<DeviceID, T>.
您的输入参数具有足够的类型信息,供编译器推断所有中间泛型类型.
它可以看出"什么进来"和"什么出来"......和"介于两者之间"的步骤相匹配.
示例:第一个调用是entrySet() ; 所以周围的类可能是一个定义了K,V的Map.所以编译器知道它正在处理一些EntrySet<K,V>......可能与找到的泛型类型相匹配neededIDs.
等等...如果你有兴趣自己"推断"这些类型; 我建议你首先分解那些流畅链接的方法调用.逐一; 计算他们返回的内容,以及您对每个操作的结果类型的了解.
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |