Sum*_*mit 4 java generics lambda java-8
问题标题可能看起来与其他帖子相同,但内容不同。所以请不要将其标记为重复。
问题:
我有以下课程:
public class SCDTO extends RDTO {
private List<String> sCPairs = Collections.emptyList();
public SCDTO(List<String> sCPairs) {
this.sCPairs = sCPairs;
}
//Getter setter
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用下面的 lambda 表达式来设置sCPairs.
sCPairsObject.setSCPairs(
util.getSCMap().entrySet().stream()
.filter(entry -> entry.getValue().contains("abc"))
.collect(Collectors.toCollection(ArrayList<String>::new))
);
Run Code Online (Sandbox Code Playgroud)
但我有一个编译错误:
no instance(s) of type variable(s) exist so that Entry<String, List<String>> conforms to String
Run Code Online (Sandbox Code Playgroud)
util.getSCMap返回Map<String, List<String>>。
谁能解释一下为什么会发生这种情况以及如何解决它?
谢谢。
您正在从地图流式传输条目:
sCPairsObject.setSCPairs(util.getSCMap().entrySet().stream()
Run Code Online (Sandbox Code Playgroud)
然后过滤掉其中一些:
.filter(entry -> entry.getValue().contains("abc"))
Run Code Online (Sandbox Code Playgroud)
现在您需要将条目映射到列表,例如:
.map(entry -> entry.getValue())
Run Code Online (Sandbox Code Playgroud)
并将所有这些列表的内容作为一个流进行流式传输:
.flatMap(List::stream)
Run Code Online (Sandbox Code Playgroud)
最后将值收集到列表中:
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)