Java HashMap添加来自两个不同Set源的密钥和流



我有一个Set<String> set1Set<String> set2,以及两个函数getSet1ElementScore(String s)getSet2ElementScore(String s)(返回整数(,并希望将两个集合中的所有元素作为其键插入到HashMap中,每个键的值根据键来自哪个集合从getSet1ElementScoregetSet2ElementScore计算。

我可以用流来传输这个吗?

我不能百分之百肯定我答对了你的问题。这可能会实现您想要的:

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,这样它是可变的,我们可以将第二个合并到它中

相关内容

  • 没有找到相关文章