美文网首页
Stream流的collect转化到Map映射

Stream流的collect转化到Map映射

作者: _MrWhite | 来源:发表于2021-02-07 09:50 被阅读0次
    package com.baifan.collecting;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Locale;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    import java.util.function.Function;
    import java.util.stream.Collector;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * @author: baifan
     * @date: 2021/2/5
     */
    public class CollectingIntoMaps {
    
        public static class Person {
            private int id;
            private String name;
    
            public Person(int id, String name) {
                this.id = id;
                this.name = name;
            }
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            @Override
            public String toString() {
                return "Person{" +
                        "id=" + id +
                        ", name='" + name + '\'' +
                        '}';
            }
        }
    
        public static Stream<Person> people() {
            return Stream.of(new Person(1001, "张三"), new Person(1002, "李四"), new Person(1003, "王五"));
        }
    
        public static void main(String[] args) {
            Map<Integer, String> idToName = people().collect(Collectors.toMap(Person::getId, Person::getName));
            System.out.println("idToName:" + idToName);
    
            Map<Integer, Person> idToPerson = people().collect(Collectors.toMap(Person::getId, Function.identity()));
            System.out.println("idToPerson:" + idToPerson.getClass().getName() + idToPerson);
    
            idToPerson = people().collect(Collectors.toMap(Person::getId, Function.identity(), (existingValue, newValue) -> {
                throw new IllegalStateException();
            }, TreeMap::new));
            System.out.println("idToPerson:" + idToPerson.getClass().getName() + idToPerson);
    
            Stream<Locale> locales = Stream.of(Locale.getAvailableLocales());
            Map<String, String> languageNames = locales.collect(Collectors.toMap(
                    Locale::getDisplayName,
                    locale -> locale.getDisplayLanguage(locale),
                    (existingValue, newValue) -> existingValue
            ));
            System.out.println("languageNames:" + languageNames);
    
    
            locales = Stream.of(Locale.getAvailableLocales());
            Map<String, Set<String>> countryLanguageSets = locales.collect(
                    Collectors.toMap(Locale::getDisplayCountry, locale -> Collections.singleton(locale.getDisplayLanguage()),
                            (a, b) -> {// union of a and b
                                Set<String> union = new HashSet<>(a);
                                union.addAll(b);
                                return union;
                            }));
            System.out.println("countryLanguageSets:" + countryLanguageSets);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Stream流的collect转化到Map映射

          本文链接:https://www.haomeiwen.com/subject/cxugtltx.html