# Collectors的groupingBy()
**Collectors的groupingBy()方法,告訴它要用哪個當作分組的鍵(Key),最後傳回的Map結果會以List作為值(Value):**
```java=
public static void main(String[] args) {
List<Student> stds = Arrays.asList(
new Student ("Jessy", "Java ME", "Chicago"),
new Student ("Helen", "Java EE", "Houston"),
new Student ("Mark", "Java ME", "Chicago"));
stds.forEach(System.out::println);
System.out.println();
Map<String,List<Student>> map = stds.stream().collect(Collectors.groupingBy(Student::getCourse));
map.forEach((key,value)->System.out.println(key+","+value));
}
```
**Console:**
```Console=
Java ME:Jessy:Chicago
Java EE:Helen:Houston
Java ME:Mark:Chicago
Java EE,[Java EE:Helen:Houston]
Java ME,[Java ME:Jessy:Chicago, Java ME:Mark:Chicago]
```
---
Example:
```java=
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 Test {
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);
}
}
```
Console:
```=
{EUROPE=[Italy, Germany], ASIA=[Japan]}
```
:::warning
元素在Map物件中的順序,愈先建立群組的項目會排在愈後面,所以「ASIA」會排在「EUROPE」之後。元素在List物件中的順序就是原先集合物件的走訪順序,所以「Italy」在「Germany」之前。
:::
- [參考網站](https://magiclen.org/ocpjp-stream-lambda/)
###### tags: `ocpjp`