Java - сортировка списка по размеру дочернего списка - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь упорядочить приведенный ниже список рабочих по количеству этих дней.Но я не могу найти правильный способ сделать это.Я могу заказать их по ID, например, следующим образом:

workers.stream().sorted(Comparator.comparingInt(Worker::getId)).collect(Collectors.toList());

Но я не могу найти способ использовать Worker.getDays (). Size () чтобы заказать их ....

    "workers": [
        {
          "id": 1,
          "days": ["Monday", "Wednesday", "Friday"]
        },
        {
          "id": 2,
          "days": ["Tuesday", "Thursday"]
        },
        {
          "id": 3,
          "days": ["Monday", "Tuesday", "Friday"]
        },
        {
          "id": 4,
          "days": ["Thursday"]
        },   
]

Надеюсь, я смогу найти хорошее решение, заранее спасибо:)

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Попробуйте:

List<Worker> sorted = workers
    .stream()
    .sorted(Comparator.comparingInt(w -> w.getDays().size()))
    .collect(Collectors.toList());
0 голосов
/ 03 октября 2018

workers.stream().sorted((w1, w2) -> w1.getDays().size() - w2.getDays().size()).collect(Collectors.toList());
или выполните w2-w1, чтобы перевернуть список

0 голосов
/ 03 октября 2018

Просто используйте лямбда-выражение , чтобы получить дни рабочего и размер.

  List<Worker> workersSortedByDaysSize = workers.stream()
    .sorted(Comparator.comparingInt(w -> w.getDays().size()))
    .collect(Collectors.toList());

Предполагается, что дни не null.

...