Вот способ, который группирует c
элементы по A
, сопоставляя каждый C
с новым B
:
Map<A, List<B>> map = listC.stream()
.collect(Collectors.groupingBy(
c -> new A(...), // construct new A instance out from c instance
Collectors.mapping(
c -> new B(...), // construct new B instance out from c instance
Collectors.toList())));
Для этого требуется класс A
для реализации hashCode
иequals
последовательно , на основе string1A
.
Затем вы просто устанавливаете List<B>
для каждого A
на карте:
map.forEach((a, listB) -> a.setListB(listB));
А ключи вашей карты - это то, что вы хотите:
Set<A> setA = map.keySet();
Или, если вам действительно нужен список:
List<A> listA = new ArrayList<>(map.keySet());