Объединение потоков - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь устранить приведенную ниже временную карту и объединить ее в одну Stream. Я попробовал немного здесь и там, но не нашел решения. Так что пока нет кода, который я могу представить, поскольку мои подходы, вероятно, вводят в заблуждение.

final Map<String, String> tempCountryMap = iso3166Alpha2CountryCodes.stream() //
  .collect(Collectors.toMap(cc -> cc, cc -> new Locale("", cc).getDisplayCountry(locale)));

final Map<String, String> sortedMap = tempCountryMap.entrySet().stream() //
  .sorted(Map.Entry.comparingByValue(Collator.getInstance(locale))) //
  .collect(Collectors.toMap(Entry<String, String>::getKey, Entry<String, String>::getValue, (e1, e2) -> e2,
      LinkedHashMap::new));

1 Ответ

1 голос
/ 05 марта 2020

Вы можете сделать это в одном конвейере, если сопоставите элементы исходных Stream с Map.Entry s, а затем продолжите сортировку:

final Map<String, String> sortedMap = 
    iso3166Alpha2CountryCodes.stream()
                             .map(cc -> new SimpleEntry<>(cc,new Locale("", cc).getDisplayCountry(locale)))
                             .sorted(Map.Entry.comparingByValue(Collator.getInstance(locale)))
                             .collect(Collectors.toMap(Map.Entry::getKey, 
                                                       Map.Entry::getValue, 
                                                       (e1, e2) -> e2,
                                                       LinkedHashMap::new));
...