我有一个Set<String> set1
和Set<String> set2
,以及两个函数getSet1ElementScore(String s)
和getSet2ElementScore(String s)
(返回整数(,并希望将两个集合中的所有元素作为其键插入到HashMap中,每个键的值根据键来自哪个集合从getSet1ElementScore
或getSet2ElementScore
计算。
我可以用流来传输这个吗?
我不能百分之百肯定我答对了你的问题。这可能会实现您想要的:
Set<String> set1 = new HashSet<>();
Set<String> set2 = new HashSet<>();
Map<String, String> mapFromSet1 =
set1.stream().collect( Collectors.toMap(Function.identity(), p -> getSet1ElementScore(p)) );
Map<String, String> mapFromSet2 =
set2.stream().collect( Collectors.toMap(Function.identity(), p -> getSet2ElementScore(p)) );
Map<String, String> resultMap = new HashMap<>();
resultMap.putAll(mapFromSet1);
resultMap.putAll(mapFromSet2);
为了在一个管道中转换它,我认为这是可能的,但您需要使用(不必要的(更多的代码。
您可以将调用适当函数的两个集合的元素处理为:
Map<String, String> result = set1.stream()
.collect(Collectors.toMap(Function.identity(), this::getSet1ElementScore,
(old, new) -> old,
HashMap::new));
result.putAll(
set2.stream()
.collect(Collectors.toMap(Function.identity(), this::getSet2ElementScore))
);
我在第一个处理中显式地创建了一个HashMap,这样它是可变的,我们可以将第二个合并到它中