У меня есть этот код:
public enum Continent {ASIA, EUROPE}
public class Country {
private String name;
private Continent region;
public Country (String na, Continent reg) {
this.name = na;
this.region = reg;
}
public String getName () {return name;}
public Continent getRegion () {return region;}
@Override
public String toString() {
return "Country [name=" + name + ", region=" + region + "]";
}
}
и в основном классе:
public static void main(String[] args) throws IOException {
List<Country> couList = Arrays.asList(
new Country ("Japan", Continent.ASIA),
new Country ("Sweden", Continent.EUROPE),
new Country ("Norway", Continent.EUROPE));
Map<Continent, List<String>> regionNames = couList
.stream()
//.peek(System.out::println)
.collect(Collectors.groupingBy(Country::getRegion, Collectors.mapping(Country::getName, Collectors.toList())));
System.out.println(regionNames);
}
Если я запустил этот код, я получаю этот вывод:
{EUROPE=[Sweden, Norway], ASIA=[Japan]}
но если я раскомментирую функцию peek
, я получаю этот вывод:
Country [name=Japan, region=ASIA]
Country [name=Sweden, region=EUROPE]
Country [name=Norway, region=EUROPE]
{ASIA=[Japan], EUROPE=[Sweden, Norway]}
Мой вопрос: может ли кто-нибудь сказать мне, почему порядок клавиш отличается на карте regionNames
, когда функция peek
находится на месте?