Я готовлюсь к экзамену по Java и задаю один вопрос, который заставил меня много времени. Несмотря на то, что я изучаю это трудно, я не могу определить, что определяет порядок результата.Java 8 - Collections.groupingBy result order
Посмотрите, пожалуйста:
class Country {
public enum Continent {
ASIA, EUROPE
}
String name;
Continent region;
public Country(String na, Continent reg) {
name = na;
region = reg;
}
public String getName() {
return name;
}
public Continent getRegion() {
return region;
}
}
public class OrderQuestion {
public static void main(String[] args) {
List<Country> couList = Arrays.asList(
new Country("Japan", Country.Continent.ASIA),
new Country("Italy", Country.Continent.EUROPE),
new Country("Germany", Country.Continent.EUROPE));
Map<Country.Continent, List<String>> regionNames = couList.stream()
.collect(Collectors.groupingBy(Country::getRegion,
Collectors.mapping(Country::getName, Collectors.toList())));
System.out.println(regionNames);
}
}
Каков результат?
A. {EUROPE = [Italy, Germany], ASIA = [Japan]}
B. {ASIA = [Japan], EUROPE = [Italy, Germany]}
C. {EUROPE = [Germany, Italy], ASIA = [Japan]}
D. {EUROPE = [Germany], EUROPE = [Italy], ASIA = [Japan]}
и что наиболее важно то, что определяет конкретный результат, а не другой?
Посмотрите на документацию API для «Карты» и посмотрите, что он говорит о порядке элементов https://docs.oracle.com/javase/8/docs/api/java/util/Map.html – SpiderPig
Предлагаемые ответы являются: A. {EUROPE = [Италия, Германия], ASIA = [Япония]} B. {ASIA = [Япония], EUROPE = [Италия, Германия]} C. {EUROPE = [Германия, Италия] , ASIA = [Япония]} D. {EUROPE = [Германия], EUROPE = [Италия], ASIA = [Япония]} Я знаю, что создает Java Runtime, выполняющий этот код (A), но понятия не имею, почему это и не что-то другое. Я ищу обоснование. –
Используя потоки, вы можете выполнять множество операций в одной строке кода. Чтобы сделать вопрос более понятным, вы можете разделить линию потока, назначить каждый шаг переменной и описать, что именно вас удивляет и что вы, кроме как видите. – KernelMode