Использование toMap
:
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;}));
или
Использование groupingBy
с mapping
в качестве нисходящего коллектора:
Map<Integer, Set<String>> resultSet = list.stream()
.collect(groupingBy(Hosting::getId,
mapping(Hosting::getValue, toSet())));
Лично я предпочитаю последнее, так как оно более читабельно.