Как я могу отсортировать карту через набор ключей? - PullRequest
2 голосов
/ 15 мая 2019

Я хотел сортировать Map по элементам набора ключей растущим способом.Тип соединения - innerJoin.У меня есть этот код:

Comparator<Tuple2<String, Integer>> comparator = Comparator.comparing((Function<Tuple2<String, Integer>, String>) Tuple2::get0).thenComparing(Tuple2::get1);

Map<Tuple2<String, Integer>, LongSummaryStatistics> grouped = join.stream()
     .collect(groupingBy(t -> Tuples.of(t.get1().getCNation(), t.get4().getDYear()), () -> new TreeMap<>(comparator), summarizingLong(t->t.get0().getLoRevenue()-t.get0().getLoSupplycost())));

grouped.forEach((k, v) -> {
     System.out.format("%-32s, %,d%n", k, v.getSum());
});

, который возвращает этот результат:

Tuple2Impl {ARGENTINA, 1992}    , 9.671.947.837
Tuple2Impl {ARGENTINA, 1993}    , 10.047.205.160
Tuple2Impl {ARGENTINA, 1994}    , 10.141.821.441
Tuple2Impl {BRAZIL, 1992}       , 9.241.877.689
Tuple2Impl {BRAZIL, 1993}       , 9.057.962.411
Tuple2Impl {BRAZIL, 1994}       , 9.303.902.867
Tuple2Impl {CANADA, 1992}       , 9.746.312.266
Tuple2Impl {CANADA, 1993}       , 9.754.277.048
Tuple2Impl {CANADA, 1994}       , 10.069.331.565
...

И я хотел получить этот результат:

Tuple2Impl {ARGENTINA, 1992}    , 9.671.947.837
Tuple2Impl {BRAZIL, 1992}       , 9.241.877.689
Tuple2Impl {CANADA, 1992}       , 9.746.312.266
Tuple2Impl {ARGENTINA, 1993}    , 10.047.205.160
Tuple2Impl {BRAZIL, 1993}       , 9.057.962.411
Tuple2Impl {CANADA, 1993}       , 9.754.277.048
Tuple2Impl {ARGENTINA, 1994}    , 10.141.821.441
Tuple2Impl {BRAZIL, 1994}       , 9.303.902.867
Tuple2Impl {CANADA, 1994}       , 10.069.331.565
...

1 Ответ

4 голосов
/ 15 мая 2019

Похоже, вы хотите заказать по году, а потом по нации.

Comparator<Tuple2<String, Integer>> comparator = 
    Comparator.comparing((Function<Tuple2<String, Integer>, Integer>) Tuple2::get1)
   .thenComparing(Tuple2::get0);

EDIT Обратите внимание, что я использую get1, а затем get0, в то время как ваш код использует get0, а затем get1.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...