Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Преобразование Map в список пар с использованием Stream

#java #java_stream


Имеем:

Map> map = fillMap();


Необходимо максимально элегантно преобразовать его в List> используя
Stream API (Pair из apache lang3).

Например, было:

[
  a=[obj1,obj2,obj3],
  b=[obj4,obj5],
  c=[obj6,obj7]
]


хочу получить:

[
  Pair{a,obj1},
  Pair{a,obj2},
  Pair{a,obj3},
  Pair{b,obj4},
  Pair{b,obj5},
  Pair{c,obj6},
  Pair{c,obj7}
]

    


Ответы

Ответ 1



Можно с помощью операции flatMap (вместо Pair - AbstractMap.SimpleEntry), она принимает функцию, возвращающую Stream и встраивает элементы возвращенного потока в основной: Map> map = new HashMap<>(); map.put( "a", Arrays.asList( "obj1", "obj2", "obj3" ) ); map.put( "b", Arrays.asList( "obj4", "obj5" ) ); map.put( "c", Arrays.asList( "obj6", "obj7" ) ); System.out.println( map ); List> list = map.entrySet().stream().flatMap( entry -> entry.getValue().stream() .map( listElement -> new AbstractMap.SimpleEntry<>( entry.getKey(), listElement ) ) ).collect( Collectors.toList() ); System.out.println( list );

Комментариев нет:

Отправить комментарий