Свести картув Список <String>(преобразование CSV) с потоками - PullRequest
1 голос
/ 14 марта 2019

Заданный ввод (ключ карты: значение)

"a":["e","c","d"]
"b":["c"]

Желаемый отсортированный вывод:

"a,c"
"a,d"
"a,e"
"b,c"

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Чтобы обеспечить удобочитаемость, лучше разбить код на два метода, чтобы вы не включили логику flatMap:

public List<String> toPairs(Map<String, Set<String> map) {
    return map.entrySet().stream()
        .flatMap(this::entryPairs)
        .sorted() // if you want the whole output to be sorted
        .collect(Collectors.toList())
}

private Stream<String> entryPairs(Map.Entry<String, Set<String>> entry) {
    return entry.getValue().stream()
        // .sorted() // you can sort the values for each key here, but this is useless if you're sorting above
        .map(v -> entry.getKey() + ',' + v)
}
1 голос
/ 14 марта 2019

То, что вы, возможно, могли бы искать, это использовать flatMap с некоторой настройкой значений для сравнения преобразованных целочисленных значений как:

return map.entrySet().stream()
        .flatMap(e -> e.getValue().stream()
                .sorted(Comparator.comparingInt(Integer::parseInt)) // or just .sorted()
                .map(v -> e.getKey() + "," + v))
        .collect(Collectors.toList());
0 голосов
/ 14 марта 2019

Не уверен, что это идеальное решение, но оно работает.

map.entrySet().stream()
  .map(entry.getValue().stream()
     .sorted()
     .map(value->entry.getKey()+","+value)
     .collect(Collectors.joining("\n"))
  )
  .sorted()
  .collect(Collectors.joining("\n"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...