Группировка по без использования POJO в Java 8 - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть случай, когда мне нужно прочитать файл и получить группировку последовательности и список значений, связанных с последовательностью. Формат этих записей в файле подобен последовательности - val, пример

10-A
10-B
11-C
11-A

Я хочу, чтобы вывод был картой (Map<String,List<String>>) с последовательностью в качестве ключа и списком значений, связанных с ним в качестве значения, как показано ниже

10,[A,B]
11,[C,A]

Есть ли способ, которым я могу сделать это без создания POJO для этих записей? Я пытался изучить использование Collectors.groupingBy, и большинство примеров, которые я вижу, основаны на создании POJO.

Я пытался написать что-то вроде этого

Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return new Tuple2<>(cpcRec[0],cpcRec[1])
}).collect(Collectors.groupingBy(x->x.))

или

Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return Arrays.asList(cpcRec[0],cpcRec[1]);
}).collect(Collectors.groupingBy(x->(ArrayList<String>)x[0]));

Я не могу предоставить какую-либо клавишу, для которой groupingBy может произойти для функции groupingBy, есть ли способ сделать это или мне нужно создать POJO для использования groupingBy?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Кроме того, вы можете использовать Map.computeIfAbsent непосредственно как:

List<String> pendingCpcList = List.of("10-A","10-B","11-C","11-A");
Map<String, List<String>> seqCpcGroupMap = new HashMap<>();
pendingCpcList.stream().map(rec -> rec.split("-"))
        .forEach(a -> seqCpcGroupMap.computeIfAbsent(a[0], k -> new ArrayList<>()).add(a[1]));
0 голосов
/ 01 ноября 2018

Вы можете сделать это так,

Map<String, List<String>> result = source.stream()
    .map(s -> s.split("-"))
    .collect(Collectors.groupingBy(a -> a[0], 
        Collectors.mapping(a -> a[1], Collectors.toList())));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...