zoukankan      html  css  js  c++  java
  • 四大函数式接口 函数型接口 断定型接口 消费型接口 供给型接口 流式计算

    函数式接口 : 有且只有一个方法的接口   比如说 Runnable  Callable  这种函数式接口在java中超级多 用来简化编程模型 在新版本的Java中大量应用

    @FunctionalInterface
    public interface Runnable {
    public abstract void run();
    }
    foreach(消费者类型的函数式接口)'

    1.Function<T,R>传入T 返回R 函数型接口
            Function<String, String> function = new Function<String, String>() {
    @Override
    public String apply(String str) {
    return str;
    }
    };
    System.out.println(function.apply("abc"));
          --->lambda表达式写法 必须会
    Function<String, String> function = (str)->{ return str;};
         //Function<String,String> function = str ->{return str}; 更简化的写法
    System.out.println(function.apply("abc"));
    2.Predicate<T t> 断定型接口 有一个输入参数 返回值只能是布尔值
    Predicate<String> predicate = new Predicate<String>(){
    @Override
    public boolean test(String s) {
    return s.isEmpty();//自己定义要做的事情 我这里判断字符串是否为空
    }
    };
    System.out.println(predicate.test(""));
    --->lambda表达式写法  必须会
    Predicate<String> predicate = str->{ return str.isEmpty();};
    System.out.println(predicate.test("123"));

    3.Consumer 消费型接口   只有输入参数 没有返回值
    Consumer<String> consumer = new Consumer<String>() {
    @Override
    public void accept(String str) {
    System.out.println(str);
    }
    };
    consumer.accept("sdhaskjfd");
    Consumer<String> consumer1 = String ->{System.out.println(String);};
    consumer1.accept("asdwq ioajdsasd");

    4. Supplie 供给型接口 没有参数 只有返回值
    Supplier supplier = new Supplier<Integer>() {
    @Override
    public Integer get() {
    return 1024;
    }
    };
    System.out.println(supplier.get());
    Supplier<Integer> supplier1 = ()->{return 1024;};
    System.out.println(supplier1.get());
    只要是函数式接口就可以用lambda表达式进行简化


    [流式计算]
    /*
    题目要求:
    现在有六个用户 筛选:
    1 ID必须是偶数
    2 年龄大于23岁
    3 用户名首字母大写
    4 用户名字母倒着排序
    5 只输出一个用户
    */
    public class QuestionTest {

    public static void main(String[] args) {
    User u1 = new User(1,"a",21);
    User u2 = new User(2,"b",22);
    User u3 = new User(3,"c",23);
    User u4 = new User(4,"d",24);
    User u5 = new User(5,"e",25);
    User u6 = new User(6,"f",26);
    //集合用来存储数据
    List<User> users = Arrays.asList(u1, u2, u3, u4, u5,u6);
    //stream流用来计算
    //lambda表达式 链式编程 函数式接口 stream流式计算
    users.stream()
    .filter(u->{return u.getId()%2==0;})
    .filter(u->{return u.getAge()>23;})
    .map(u->{return u.getName().toUpperCase();})
    .sorted((uu1,uu2)->{return uu2.compareTo(uu1);})
    .limit(1)
    .forEach(System.out::println);
    }
    }
    class User{
    int id;
    String name;
    int age;

    public User(){}
    public User(int id,String name,int age){
    this.id=id;
    this.name=name;
    this.age=age;
    }

    public int getId() {
    return id;
    }

    public int getAge() {
    return age;
    }

    public String getName() {
    return name;
    }

    @Override
    public String toString() {
    return "user = " + "{" + id +","+ name +"," + age + "}";
    }
    }


  • 相关阅读:
    SpringBoot与quartz集成
    SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证
    搭建Redis集群和MySQL主从同步
    scanf_s读取键盘输入字符串失败
    含有通配符*的字符匹配(C语言)
    人之患
    TCP socket编程记录(C语言)
    程序变量命名规范(个人)
    h lib dll文件相关部分
    关于inet_ntop、inet_pton中的n和p分别代表的意义
  • 原文地址:https://www.cnblogs.com/jzspace/p/12981857.html
Copyright © 2011-2022 走看看