Помогите Получить игрока, который находится на n месте по очкам.

  • Автор темы Автор темы Chupaaa
  • Дата начала Дата начала

Chupaaa

Новичок
Пользователь
Баллы
21
Имя в Minecraft
xChupa
Всем привет!
Нужна ваша помощь. В файл заносятся данные:
Код:
players:
  vasya:
    points: 40
  petr:
    points: 60
  stas:
    points: 20
Как получить того, кто будет находиться, допустим, на 2 месте по очкам?
 
Наверное можно сделать проще, но вот:
Код:
class PointsTest {

    @Test
    void testIt() {
        // Map <Name, Points>
        Map<String, Integer> map = new HashMap<>();
        map.put("Noob", -1);
        map.put("Best player ever", 500);
        map.put("Good player", 250);
        map.put("Noname", 25);
        map.put("Admin", 1337228);
        map.put("Admin's friend", 1337228);

        // Reversing map

        Multimap<Integer, String> reversedMultimap = ArrayListMultimap.create();

        map.forEach((name, points) -> reversedMultimap.put(points, name));

        // Sorting

        List<Collection<String>> sortedList = reversedMultimap.asMap().entrySet()
                .stream()
                .sorted(Comparator.<Map.Entry<Integer, Collection<String>>>comparingInt(Map.Entry::getKey).reversed())
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        // Except

        List<Collection<String>> exceptSortedList = new ArrayList<>();
        exceptSortedList.add(Arrays.asList("Admin", "Admin's friend"));
        exceptSortedList.add(Collections.singletonList("Best player ever"));
        exceptSortedList.add(Collections.singletonList("Good player"));
        exceptSortedList.add(Collections.singletonList("Noname"));
        exceptSortedList.add(Collections.singletonList("Noob"));

        assertEquals(exceptSortedList, sortedList);
    }
}
sortedList.get(1) -> игроки на втором месте

Screenshot_20190418_123925.png
 
Наверное можно сделать проще, но вот:
Код:
class PointsTest {

    @Test
    void testIt() {
        // Map <Name, Points>
        Map<String, Integer> map = new HashMap<>();
        map.put("Noob", -1);
        map.put("Best player ever", 500);
        map.put("Good player", 250);
        map.put("Noname", 25);
        map.put("Admin", 1337228);
        map.put("Admin's friend", 1337228);

        // Reversing map

        Multimap<Integer, String> reversedMultimap = ArrayListMultimap.create();

        map.forEach((name, points) -> reversedMultimap.put(points, name));

        // Sorting

        List<Collection<String>> sortedList = reversedMultimap.asMap().entrySet()
                .stream()
                .sorted(Comparator.<Map.Entry<Integer, Collection<String>>>comparingInt(Map.Entry::getKey).reversed())
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        // Except

        List<Collection<String>> exceptSortedList = new ArrayList<>();
        exceptSortedList.add(Arrays.asList("Admin", "Admin's friend"));
        exceptSortedList.add(Collections.singletonList("Best player ever"));
        exceptSortedList.add(Collections.singletonList("Good player"));
        exceptSortedList.add(Collections.singletonList("Noname"));
        exceptSortedList.add(Collections.singletonList("Noob"));

        assertEquals(exceptSortedList, sortedList);
    }
}
sortedList.get(1) -> игроки на втором месте

Спасибо большое!
 
Назад
Верх