zoukankan      html  css  js  c++  java
  • (6)函数式接口的简单使用

    突然间又来了一个新需求,比如,我想要所有人的名字,不要其他信息。

    package com.qunar.hotel.java8;
     
     
    import com.google.common.collect.ImmutableList;
    import com.google.common.collect.Lists;
    import org.junit.Test;
     
    import java.util.List;
     
     
    public class MyTest {
        private final List<Person> allPersonList;
     
        {
            Person p1 = new Person("风清扬"42);
            Person p2 = new Person("独孤求败"66);
            Person p3 = new Person("令狐冲"16);
            Person p4 = new Person("东方不败"25);
            allPersonList = ImmutableList.of(p1, p2, p3, p4);
        }
     
        @Test
        public void test() {
            System.out.println(getAllName());
        }
     
        private List<String> getAllName() {
            List<String> names = Lists.newArrayList();
            for (Person person : allPersonList) {
                names.add(person.getName());
            }
            return names;
        }
    }

    这就有一个问题是,需要所有人的住址怎么办,所有人的手机号怎么办,在写几个方法?还是写switch然后case?这样办。

    public void test() {
        List<String> nameList = transform(allPersonList, Person::getName);
        List<Integer> ageList = transform(allPersonList, Person::getAge);
        System.out.println(nameList);
        System.out.println(ageList);
    }
     
    private <T,R> List<R> transform(List<T> list, Function<T,R> function){
        List<R> result = Lists.newArrayList();
        for (T t : list){
            R apply = function.apply(t);
            result.add(apply);
        }
        return result;
    }

    Function的apply方法接收一个参数返回一个参数,Person:::getName这个表达式编译器可以识别出入参是Person的一个实例,返回值是一个String,符合apply方法的定义,所以可以传过去。

    下面简单演示一下最后两个函数式接口的用法:

    @Test
    public void test() {
        printListWithLine(allPersonList, System.out::println);
    }
     
    private <T> void printListWithLine(List<T> list, Consumer<T> consumer) {
        for (T t : list) {
            consumer.accept(t);
        }
    }
    @Test
    public void test() {
        Supplier<Person> personSupplier = Person::new;
        Person person = personSupplier.get();
    }
  • 相关阅读:
    cookie的路径
    cookie的生命
    cookie详解
    cookie简介&用途
    编码
    请求转发和重定向的区别
    request:域
    request:请求转发,请求包含
    常用的html语法
    request:获取请求的URL
  • 原文地址:https://www.cnblogs.com/zhandouBlog/p/9383239.html
Copyright © 2011-2022 走看看