Метод сравнения компаратора для сравнения двойных значений - PullRequest
0 голосов
/ 24 марта 2020

Я должен отсортировать свой список ответов по баллам, но счет имеет двойное значение, и я попытался реализовать метод сравнения класса Comparator, ответ не сильно меняется, потому что двойная разница становится значением int и в итоге не сортируется это,

Есть ли способ, которым я могу использовать этот метод сравнения для двойного или есть ли другой способ, которым я могу отсортировать свой ответ по баллу?

private List<MyResponseByScore> buildMyResponseByScore(MyreposneWithScore MyreposneWithScore) {
    return MyresposneWithScore.getAllScores().stream()
            .map(x -> new MyResponseByScore(
                    x.getAllOptions().getMayVal(),
                    (double) x.getMyScore(),
                    x.getAllOptions().getSomeVal()))
            .collect(Collectors.toList()).sort(new Comparator<MyResponseByScore>() {
        @Override
        public int compare(MyResponseByScore o1, MyResponseByScore o2) {
            if (o1.getScore() > o2.getScore()) {
                return o1.getScore() - o2.getScore();
            }
            return 0;
        }
    });

1 Ответ

3 голосов
/ 24 марта 2020

Гораздо (намного) проще будет заменить собственную реализацию Comparator на Comparator.comparingDouble(MyResponseByScore::getScore)

, что устраняет всю сложность самостоятельной разработки крайних случаев. И это дает вам легкий доступ к элегантным способам изменения порядка, таким как .reversed(), .thenComparing(...) et c.

...