zoukankan      html  css  js  c++  java
  • Function.identity()的含义

    偶然之间发现的这个函数,感觉还是很有用的,尤其实在返回map的时候,value还为本身,用起来就很方便。

    Java 8允许在接口中加入具体方法。接口中的具体方法有两种,default方法和static方法,identity()就是Function接口的一个静态方法。
    Function.identity()返回一个输出跟输入一样的Lambda表达式对象,等价于形如t -> t形式的Lambda表达式

    @Test public void test() {
            List<Person> personList = new ArrayList<>();
            personList.add(new Person("hepengju", 28, 20000.0));
            personList.add(new Person("lisi"    , 44, 40000.0));
            personList.add(new Person("wangwu"  , 55, 50000.0));
            personList.add(new Person("zhaoliu" , 66, 60000.0));
            personList.add(new Person("zhangsan", 33, 33333.0));
            personList.add(new Person("wgr", 23, 10000.0));
            Map<String, Person> collect = personList.stream().collect(Collectors.toMap(Person::getName, Function.identity()));
            collect.forEach((name,p) ->{
                System.out.println(name + ":"+p);
            });
     
    
        }

     但是改成同一个名字的时候就会报错

     修改如下:

    @Test public void test() {
            List<Person> personList = new ArrayList<>();
            personList.add(new Person("hepengju", 28, 20000.0));
            personList.add(new Person("lisi"    , 44, 40000.0));
            personList.add(new Person("wangwu"  , 55, 50000.0));
            personList.add(new Person("zhaoliu" , 66, 60000.0));
            personList.add(new Person("zhangsan", 33, 33333.0));
            personList.add(new Person("zhangsan", 23, 10000.0));
            ConcurrentHashMap<String, Person> collect = personList.stream().collect(Collectors.toMap(Person::getName, Function.identity(), (o1, o2) -> o1, ConcurrentHashMap::new));
            collect.forEach((name,p) ->{
                System.out.println(name + ":"+p);
            });

    如果想返回 Map<String, Map<Integer, Person>>,可以这样写。
     Map<String, Map<Integer, Person>> collect = personList.stream().collect(Collectors.toMap(Person::getName, p -> {
                Map<Integer, Person> map = new HashMap<>();
                map.put(p.getAge(), p);
                return map;
            }));
            collect.forEach( (name,p) ->{
                System.out.println(name + ":"+p);
            });

  • 相关阅读:
    正确使用Core Data多线程的3种方式
    iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK
    Atomic:Android、iOS和网页的设计工具
    iOS应用架构谈(三):View层的组织和调用方案(下)
    SQL server 2008数据库的备份与还原(转)
    重定向技术
    Python 正则表达式应用【转载】
    Fidder 工具使用
    HTTP请求大全
    RobotFramework环境搭建
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12611247.html
Copyright © 2011-2022 走看看