#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 );
Комментариев нет:
Отправить комментарий