Как отсортировать список пользовательских критериев в коллекциях Java - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу отсортировать следующий элемент по количеству вхождений

Я использую

List<Gender> list = query.list();
Set<Gender> unique = new HashSet<Gender>(list);
        for (Gender key : unique) {
            System.out.println(key + ": " + Collections.frequency(list, key));
        }

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

И вся эта информация теперь хранится в списке.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

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

    List<Gender> list = new ArrayList<>();
    list.add(Gender.FEMALE);
    list.add(Gender.MALE);
    list.add(Gender.MALE);
    list.add(Gender.FEMALE);
    list.add(Gender.MALE);
    list.add(Gender.FEMALE);

    list.add(Gender.MALE);
    Map<Gender,Long> frequency2 = list.stream().collect(
            Collectors.groupingBy(Function.identity(),Collectors.counting())
    ).entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(
            (Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                    (oldValue, newValue) -> oldValue, LinkedHashMap::new)));

    List<Gender> result = new ArrayList<>();
    for (Map.Entry<Gender,Long> entry: frequency2.entrySet()) {
        for (int i = 0; i < entry.getValue(); i++) {
            result.add(entry.getKey());
        }
    }
    System.out.println(result);
0 голосов
/ 20 декабря 2018

Если вы запрашиваете это из базы данных SQL, вы можете сделать подсчет AssignedTo и использовать group by, а затем вернуть их в порядке убывания.

Если это только на Java, используйте циклпросмотреть список и подсчитать для каждого AssignedTo.

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