ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022.8.21 四大函数式接口与Stream流式计算

2022-08-21 22:03:46  阅读:141  来源: 互联网

标签:function return String Stream 接口 User 2022.8 public 21


12、四大函数式接口(重点)

 

 

 

函数接口:只有一个方法的接口

 

 

 

 @FunctionalInterface
 public interface Runnable {
   
     public abstract void run();
 }
 //超级多@FunctionalInterface
 //减缓编程模型,在新版本中的框架底层大量应用
 //foreach(消费者类型的函数式接口)
 ​

1、Function函数式接口

 

 

 

 package com.xing.function;
 ​
 import java.util.function.Function;
 ​
 /**
  * Function 函数型接口 有一个输入参数 一个输出参数
  * 只要是函数结构就可以用lambda简化
  */
 public class demo01 {
     public static void main(String[] args) {
         //工具类:输出输入的值         参数的类型   返回值类型  
         /*Function function = new Function<String,String>() {
             @Override
             public String apply(String str) {
                 return str;
             }
         };*/
 ​
         // Function<String,String> function = (参数) ->{代码;};
 ​
         Function<String,String> function = (str) ->{return str;};
         System.out.println(function.apply("ads"));
    }
 }

2、Predicate 断定型接口

有一个输入参数,返回值只能是 布尔值!

 

 

 

 package com.xing.function;
 ​
 import java.util.function.Predicate;
 /*
 断定型接口:有一个输入参数,返回值只能是boolean值
  */
 public class demo02 {
     public static void main(String[] args) {
         //判断字符串是否为空                         参数的类型
        /* Predicate<String> predicate = new Predicate<String>(){
             @Override
             public boolean test(String str) {
                return str.isEmpty();
             }
         };*/
         
         Predicate<String> predicate = (str) -> {return str.isEmpty();};
         
         System.out.println(predicate.test(""));//true
         System.out.println(predicate.test("1"));//false
    }
 }

3、Consumer 消费型接口

 

 

 

 package com.xing.function;
 ​
 import java.util.function.Consumer;
 /*
 Consumer 消费型接口:只有输入,没有返回值
  */
 public class demo03 {
     public static void main(String[] args) {
         //                                       参数类型
         /*Consumer<String> consumer = new Consumer<String>() {
             @Override
             public void accept(String str) {
                 System.out.println(str);
             }
         };*/
         Consumer<String> consumer = (str) -> {
             System.out.println(str);
        };
         consumer.accept("asb");//asb
    }
 }
 ​

4、Supplier 供给型接口

 

 

 

 package com.xing.function;
 ​
 import java.util.function.Supplier;
 /*
 supplier 供给型接口,不需要输入只有返回值
  */
 public class demo04 {
     public static void main(String[] args) {
        //                               返回值类型
        /* Supplier supplier = new Supplier<Integer>(){
             @Override
             public Integer get() {
                 System.out.println("get()");
                 return 1024;
             }
         };*/
         Supplier<Integer> supplier = () -> {return 1024;};
         System.out.println(supplier.get());//1024
    }
 }

13、Stream流式计算(重点)

大数据:存储+计算

集合、MySQL本质就是存储东西的;计算都应该交给流!

 

 

 

常见使用方法:map(对对象进行操作)filter(对对象进行过滤)sorted(排序)limit(限制输出数量)

 package com.xing.stream;
 ​
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 ​
 /**
  * 题目要求:一分钟完成此题,只能用一行代码解决
  * 现在有五个用户!筛选:
  * 1.ID必须是偶数
  * 2.年龄必须大于23岁
  * 3.用户名转为大写
  * 4.用户名字母顺序倒序
  * 5.只输出一个用户
  */
 public class Test {
     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(6,"e",25);
 ​
         //集合就是存储
         List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
 ​
         //计算交给流,链式编程
        /*
        * list.stream():将list转换为流
        * filter(Predicate<? super T> predicate):过滤 参数为断定型接口 看看断定型接口的简写方式
        * map(Function<? super T, ? extends R> mapper): 映射 参数为函数式接口
        * sorted(Comparator<? super T> comparator):排序(默认正序) 参数为消费型接口
        * limit(long maxSize):输出的数据数
        */
         list.stream()
                .filter(u->{return u.getId()%2==0;})//判断偶数
                .filter(u ->{return u.getAge() >23;})//判断大于23岁
                .map(u -> {return u.getName().toUpperCase(Locale.ROOT);})//名字大写
                 //.sorted((uu1,uu2)->{return uu1.compareTo(uu2);})//正序
                .sorted((uu1,uu2)->{return uu2.compareTo(uu1);})//倒序
                .limit(1)
                .forEach(System.out::println);//输出 E
 ​
 ​
    }
 }
 class User{
     private int id;
     private String name;
     private  int age;
 ​
     public User(int id, String name, int age) {
         this.id = id;
         this.name = name;
         this.age = age;
    }
 ​
     public int getId() {
         return id;
    }
 ​
     public String getName() {
         return name;
    }
 ​
     public int getAge() {
         return age;
    }
 ​
     public void setId(int id) {
         this.id = id;
    }
 ​
     public void setName(String name) {
         this.name = name;
    }
 ​
     public void setAge(int age) {
         this.age = age;
    }
 ​
     @Override
     public String toString() {
         return "User{" +
                 "id=" + id +
                 ", name='" + name + '\'' +
                 ", age=" + age +
                 '}';
    }
 }
 ​

标签:function,return,String,Stream,接口,User,2022.8,public,21
来源: https://www.cnblogs.com/shanzha/p/16610989.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有