如何在Java8中将列表转换为具有设置值的映射

如何在Java8中将列表转换为具有设置值的映射,java,java-8,java-stream,Java,Java 8,Java Stream,如何在Java 8中进行转换?使用toMap: 1 -> {"liquidweb.com"} 2 -> {"aws.amazon.com"} 3 -> {"digitalocean.com"} 就个人而言,我更喜欢后者,因为它更具可读性。是否会有多个字符串映射到同一个ID?在您的示例中,2->aws.amazon.com被重复,但最终结果仍然是1对1的映射。@JohnKugelman good should!。我会“假设”在某些情况下,如果键的对应值是一个Set,则会有多个字

如何在Java 8中进行转换?

使用
toMap

1 -> {"liquidweb.com"}
2 -> {"aws.amazon.com"}
3 -> {"digitalocean.com"}

就个人而言,我更喜欢后者,因为它更具可读性。

是否会有多个字符串映射到同一个ID?在您的示例中,
2->aws.amazon.com
被重复,但最终结果仍然是1对1的映射。@JohnKugelman good should!。我会“假设”在某些情况下,如果键的对应值是一个
Set
,则会有多个字符串映射到同一个id,但如果不是,则OP最好使用
map result=list.stream().collect(toMap(Hosting::getId,Hosting::getValue,(l,r)->l))
1 -> {"liquidweb.com"}
2 -> {"aws.amazon.com"}
3 -> {"digitalocean.com"}
Map<Integer, Set<String>> result = list.stream()
                .collect(toMap(Hosting::getId,
                        e -> new HashSet<>(Collections.singleton(e.getValue())),
                        (l, r) -> {l.addAll(r); return l;}));
Map<Integer, Set<String>> resultSet = list.stream()
          .collect(groupingBy(Hosting::getId, 
                       mapping(Hosting::getValue, toSet())));