首页 > 其他分享 >2022.8.21 四大函数式接口与Stream流式计算

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

时间:2022-08-21 21:57:07浏览次数:77  
标签: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
From: https://www.cnblogs.com/shanzha/p/16610989.html

相关文章

  • 2022.8.21 Forkjoin与异步回调
    14、Forkjoin(分支合并)什么是ForkJoinForkJoin在JDK1.7, 并行执行任务!提高效率。在大数据量中!大数据:MapReduce(把大任务拆分为小任务)Forkjoin特点:工作窃取,这里......
  • 解决使用stream将list转map时,key重复导致报错的问题
    解决使用stream将list转map时,key重复导致报错的问题要将List对象集合转为map集合,可以通过stream流的形式快速实现转换:?123456789//三个Users对象组成一个List集合List......
  • 2022.8.21 读写锁与阻塞队列
    9、读写锁   自定义的缓存,没有加锁,就会出现一个没有写入完成,另一个突然插进来的情况 packagecom.xing.rw; ​ importjava.util.HashMap; importjava.util.......
  • 2022.8.21 JUC
    1、什么是JUC1、什么是juc(学习方法:官方文档+源码)   JUC——(java.util.concurrent)是一个包名的缩写,java工具类下的一个并发功能的包。该包下存放的均为多线程相......
  • 2022-08-21 假突破立即做空,就如同突破收敛三角就做单一样,总会给你一段利润。
     同样是假突破,第二次上冲。左边完成了整个4h标准中枢,右边又形成了30分钟的笔中枢扩展。左边4h图,假突破之后,完成了4h一个全部线段中枢的上涨。最后一段是背驰段,结束了30......
  • 2022.8.21
    1.学习了MCS最大势算法,补充了弦图几个性质和konig定理的证明,做完了PPT。2.继续做了2道网络流24题,几道弦图相关的题目,看了昨天的CF,D题不是很懂3.最大流最小割定理,弦图是......
  • 「PKUSC2021」Sum Transformation 解题报告
    题目描述定义矩阵变换 \(F(P)=Q\),其中 \(P\) 和 \(Q\) 是\(n×n\) 的矩阵且满足 \(Q_{i,j}=(\sum^{n}_{k=1}P_{k,j}+\sum_{k=1}^nP_{i,k})mod\spacep\)。给定 \(......
  • 2022-8-21 刘明延 学习笔记
    学习心得:今天讲数据库连接池,老师做了一个小框架,有讲到反射,我看了几遍,也是知道了些反射的用法,这个框架里的东西都是用java基础写的,我也是觉得拓展了我的思维,打算多......
  • 219. 存在重复元素 II
     思路难度简单506收藏分享切换为英文接收动态反馈给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i]==nu......
  • JAVA基础--程序流程控制--2022年8月21日
    第一节分支结构1、if分支的写法有几种,各有什么特点?if(){}if(){}  else{}if(){}  elseif(){} elseif(){} ... else{}......