zoukankan      html  css  js  c++  java
  • java中的stream的Map收集器操作

    源: java中的stream的Map收集器操作

     
     
    package test9;
    
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    import java.util.function.Function;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class CollectorsTest {
        public static void main(String[] args) {
            Map<String, Person> map = Stream
                    .of(Person.valueOf("小明", '男', 18), Person.valueOf("小丽", '女', 16), Person.valueOf("小王", '男', 19))
                    .collect(Collectors.toMap(Person::getName, Function.identity()));
            System.out.println("map:" + map);
    
            Map<String, Person> map2 = Stream
                    .of(Person.valueOf("小明", '男', 18), Person.valueOf("小丽", '女', 16), Person.valueOf("小明", '男', 19))
                    .collect(Collectors.toMap(Person::getName, Function.identity(), (x, y) -> y));
            System.out.println("如果有2个key重复了就用新的,‘y’,想用旧的代替就用'x',自己选择,map2:" + map2);
    
            /*
             * 需求:要求将已有的国家名为key, 人名为value(当然也可以是对象)集合。
             */
            Map<String, Set<String>> map3 = Stream
                    .of(Person.valueOf("China", "小明"), Person.valueOf("China", "小丽"), Person.valueOf("us", "Jack"),
                            Person.valueOf("us", "Alice"))
                    .collect(Collectors.toMap(Person::getCountry, p -> Collections.singleton(p.getName()), (x, y) -> {
                        Set<String> set = new HashSet<>(x);
                        set.addAll(y);
                        return set;
                    }));
            System.out.println("map3:" + map3);
    
            // 将所有元素检查key不重复且最终包装成一个TreeMap对象
            Map<String, String> map4 = Stream.of(Person.valueOf("China", "小明"), Person.valueOf("Chinsa", "小丽"), Person.valueOf("us", "Jack"),
                Person.valueOf("uss", "Alice"))
                .collect(Collectors.toMap(
                    Person::getCountry, 
                    Person::getName, (x, y) -> 
                    {
                        throw new IllegalStateException();
                    },TreeMap::new));
            System.out.println(map4);
    
        }
    }
    
    class Person {
        private String country;
    
        private String name;
    
        private Character sex;
    
        private Integer age;
    
        public String getCountry() {
            return country;
        }
    
        public void setCountry(String country) {
            this.country = country;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Character getSex() {
            return sex;
        }
    
        public void setSex(Character sex) {
            this.sex = sex;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "name:" + name + "sex:" + sex + "age" + age;
        }
    
        public static Person valueOf(String country, String name) {
            Person person = new Person();
            person.country = country;
            person.name = name;
            return person;
        }
    
        public static Person valueOf(String name, Character sex, Integer age) {
            Person person = new Person();
            person.name = name;
            person.sex = sex;
            person.age = age;
            return person;
        }
    }

    打印结果:

    map:{小明=name:小明sex:男age18, 小丽=name:小丽sex:女age16, 小王=name:小王sex:男age19}


    如果有2个key重复了就用新的,‘y’,想用旧的代替就用'x',自己选择,map2:{小明=name:小明sex:男age19, 小丽=name:小丽sex:女age16}


    map3:{China=[小明, 小丽], us=[Alice, Jack]}


    {China=小明, Chinsa=小丽, us=Jack, uss=Alice}

  • 相关阅读:
    洛谷 P1650 田忌赛马(dp)
    卡常技巧(持续更新)
    CF106C Buns(多重背包 单调队列优化)
    洛谷 P1385 密令(dp,离线)
    CF245H Queries for Number of Palindromes(dp,二维前缀和)
    CF1061C Multiplicity(dp)
    对拍技巧
    牛客练习赛89 解题报告(ABCDF)
    洛谷 P1018 [NOIP2000 提高组] 乘积最大(dp,高精度)
    洛谷 P5629 【AFOI-19】区间与除法(ST表)
  • 原文地址:https://www.cnblogs.com/xiaoshen666/p/11117975.html
Copyright © 2011-2022 走看看