В выходные я читал о Java 14 предварительных записях. Я не хотел задавать этот вопрос, потому что, кажется, код для Брайана Гетца, и мы все знаем, кто этот парень и что представляет для экосистемы Java, но с тех пор это было в моей голове, и я знаю, что это будет учись для меня.
Ссылка здесь. https://www.infoq.com/articles/java-14-feature-spotlight/?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=Java
Это что-то вроде этого.
record PlayerScore(Player player, Score score) {
// convenience constructor for use by Stream::map
PlayerScore(Player player) { this(player, getScore(player)); }
}
List<Player> topN
= players.stream()
.map(PlayerScore::new)
.sorted(Comparator.comparingInt(PlayerScore::score))
.limit(N)
.map(PlayerScore::player)
.collect(toList());
Я предполагаю, что эта строка возвращает ссылку на оценку.
getScore(player)
Возможно Вы видите это прежде, чем я понимаю, что он пытается сделать, но есть кое-что, чего я не понимаю. Может быть, я ошибаюсь.
Эта строка
.sorted(Comparator.comparingInt(PlayerScore::score))
API для comparingInt
такой:
public static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor) {
Но пока я понимаю метод reference
PlayerScore::score
Правильно ли возвращать ссылку на Score из кортежа Records? не является целым числом или не приводит к целому числу
Или это может привести к компиляции кода, я думаю, возможно, это ошибка ввода.
record PlayerScore(Player player, int score) {
// convenience constructor for use by Stream::map
PlayerScore(Player player) { this(player, getScore(player)); }
}
Насколько я понимаю, этот код не будет компилироваться, так как я заявлено ранее; возможно я ошибаюсь.