亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java Stream API將List按自定義分組規則轉換成Map

發布時間:2021-11-12 10:30:38 來源:億速云 閱讀:634 作者:小新 欄目:開發技術

小編給大家分享一下怎么使用Java Stream API將List按自定義分組規則轉換成Map,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

測試數據是List里的4個員工對象實例:

怎么使用Java Stream API將List按自定義分組規則轉換成Map

根據員工所在的城市進行分組:

怎么使用Java Stream API將List按自定義分組規則轉換成Map

結果分成了三組:

第一組的員工在上海:

怎么使用Java Stream API將List按自定義分組規則轉換成Map

第二組的員工在成都:

怎么使用Java Stream API將List按自定義分組規則轉換成Map

統計每組員工個數:

怎么使用Java Stream API將List按自定義分組規則轉換成Map怎么使用Java Stream API將List按自定義分組規則轉換成Map

把員工進行分組,得分大于101分的在一組,小于等于101的在另一組:

怎么使用Java Stream API將List按自定義分組規則轉換成Map

分組結果:

怎么使用Java Stream API將List按自定義分組規則轉換成Map怎么使用Java Stream API將List按自定義分組規則轉換成Map

package java8;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.function.Consumer;import java.util.stream.Collectors;class Employee {
    private String city;
    private String name;
    private int score;
    public Employee(String name, String city, int score){
        this.city = city;
        this.name = name;
        this.score = score;
    }
    public String getCity(){
        System.out.println("city: " + this.city);
        return this.city;
    }
    public String getName() {
        return this.name;
    }
    public int getScore() {
        return this.score;
    }
    @Override
    public String toString() {
        return String.format("Employee: " + this.name + " city: " + this.city);
    }}class Person {
    private String name;
    private int age;
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return String.format("Person{name='%s', age=%d}", name, age);
    }}// Jerry 2016-01-15 20:51PM ? 多用于extends generic的type,接受所有Object的sub classpublic class StreamTest {
    private static void printMap(Map<? extends Object, ? extends Object> map) {
         for(Entry<? extends Object, ? extends Object> entry:map.entrySet()) {
                System.out.println("key = " + entry.getKey() + " , Value = " + entry.getValue());
             }
    }
    public static void main(String[] args) {
        ArrayList<Employee> employees = new ArrayList<Employee>();
        employees.add(new Employee("A", "Shanghai",100));
        employees.add(new Employee("B", "Chengdu",101));
        employees.add(new Employee("C", "Shenzhen",102));
        employees.add(new Employee("D", "Chengdu",104));
        // group by City        Map<String, List<Employee>> employeesByCity =
                employees.stream().collect( Collectors.groupingBy(Employee::getCity));
        //  default void forEach(Consumer<? super T> action) {        for(Map.Entry<String, List<Employee>> entry:employeesByCity.entrySet()) {
            System.out.println("key= " + entry.getKey() + " , Value = " + entry.getValue());
            entry.getValue().forEach(System.out::println);
         }
         // 2016-01-15 20:37PM 
         Consumer<Employee> aa = a -> { System.out.println("Employee: " + a.getName() + " : " +  a.getScore()); };
         List<Employee> chengduEmployee = employeesByCity.get("Chengdu");
         chengduEmployee.forEach(aa);
         // test for counting         Map<String, Long> employeesByCity2 = 
                 employees.stream().collect( Collectors.groupingBy(Employee::getCity, Collectors.counting()));
         printMap(employeesByCity2);
         // calculate average score         Map<String, Double> employeesByCity3 = 
                 employees.stream().collect( Collectors.groupingBy(Employee::getCity,
                         Collectors.averagingInt(Employee::getScore)));
         printMap(employeesByCity3);
        /*Stream<Person> people = Stream.of(new Person("Paul", 24), new Person("Mark", 30), new Person("Will", 28));        Map<Integer, List<String>> peopleByAge = people.collect(groupingBy(p -> p.age, mapping((Person p) -> p.name, toList())));        System.out.println(peopleByAge);*/
         /*          * 分區是一種特殊的分組,結果 map 至少包含兩個不同的分組——一個true,一個false。          * 例如,如果想找出最優秀的員工,你可以將所有雇員分為兩組,一組銷售量大于 N,          * 另一組小于 N,使用 partitioningBy 收集器:          */
         System.out.println("partition result");
         Map<Boolean, List<Employee>> partitioned =
                 employees.stream().collect(Collectors.partitioningBy(e -> e.getScore() > 101));
         printMap(partitioned);
         /*          * 你也可以將 groupingBy 收集器傳遞給 partitioningBy 收集器來將聯合使用分區和分組。例如,你可以統計每個分區中的每個城市的雇員人數:        Map<Boolean, Map<String, Long>> result =        employees.stream().collect(partitioningBy(e -> e.getNumSales() > 150,        groupingBy(Employee::getCity, counting())));        這樣會生成一個二級 Map:        {false={London=1}, true={New York=1, Hong Kong=1, London=1}}          */
    }}

以上是“怎么使用Java Stream API將List按自定義分組規則轉換成Map”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

烟台市| 张北县| 永修县| 吴川市| 宣城市| 永新县| 溧水县| 保定市| 八宿县| 枣阳市| 文安县| 怀化市| 那曲县| 乡宁县| 鄂州市| 温宿县| 丰镇市| 莒南县| 新密市| 遂平县| 焦作市| 确山县| 扶沟县| 吉水县| 高阳县| 富阳市| 大洼县| 顺义区| 白水县| 大邑县| 莒南县| 普陀区| 普洱| 聊城市| 阿巴嘎旗| 英超| 青海省| 开封县| 和田市| 罗山县| 江口县|