ICode9

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

jdk8:Lambda表达式与Stream流操作

2021-09-25 19:02:05  阅读:140  来源: 互联网

标签:Stream System 接口 jdk8 参数 str println out Lambda


Lambda表达式

1、什么是Lambda表达式

Lambda就是匿名内部类的简化形式,返回一个接口类对象

2、语法

(参数,参数)->{表达式代码}

3、函数式接口

只有一个抽象方法的接口叫函数式接口

4、Lambda表达式简写

某些情况下可以省略参数列表的括号和表达式代码的括号,例如

 PrintMsg p = msg->System.out.println("msg");

java.util.function中的函数式接口

1、@FunctionalInterface注解,表明函数式接口

 @FunctionalInterface
 public interface Consumer<T> {
     void accept(T t);
 }

2、Function函数式接口,一个参数一个返回值

 public static void main(String[] args) {
         //输入字符串,返回字符串长度。第一个泛型是参数类型,第二个是返回值类型
         Function<String,Integer> method=str->str.length();
         Integer length = method.apply("123");
         System.out.println(length);
 }

3、andThen方法,调用两个函数式接口处理一个数据

public static void main(String[] args) {
         //输入字符串,返回字符串长度。第一个泛型是参数类型,第二个是返回值类型
         Function<String,String> before=s1->"www."+s1;
         Function<String,String> after=s1->s1+".com";
         //先执行before.apply("baidu"),然后将结果s1传给agter.apply(s1)
         String res = before.andThen(after).apply("baidu");
         System.out.println(res);//www.baidu.com
  }

4、BiFunction,两个参数,一个返回值接口

 void test1(){
         //传递两个参数的lambda函数
         BiFunction<Integer,Integer,String> fun1=(a,b)->{
             return a+b+"";
         };
         String res = fun1.apply(1, 2);
         System.out.println(res);//3
 }

5、Consumer有参数无返回值接口和Supplier无参数有返回值接口

 void test2(){
     //消费者接口,接收参数,无返回值
     Consumer<Integer> fun1 = num->{
         System.out.println(num);
     };
     fun1.accept(3);
     //构造器接口(生产者接口),用来创建对象
     Supplier<String> fun2=String::new;
     String s=fun2.get();//获取创建对象
     //有参构造器接口
     Function<String,String> fun3=String::new;
     String str = fun3.apply("lisi");
     System.out.println(str);
 }

6、Predicate断言接口,一个参数,test方法返回boolean值

 void test2(){
     //断言接口,对参赛进行判断返回布尔值
     Predicate<Integer> fun1=num->num>0;
     System.out.println(fun1.test(-1));//判断-1是否大于0。false
 }

Stream流操作集合

应用场景

处理集合,替代for操作,简化流程、提高效率

注意事项

  • 流只能调用一次,list.stream(),list.stream()报错

  • 流操作必须有终结方法,不然中间操作不会执行

一、将对象变为流

三种方法

 1、对象.stream()方法
 2、对象.parallelStream()方法
 3、Stream.of(arr)或多个参数

二、流的方法(常用的)

filter过滤方法,参数Predicate接口,lambda返回值布尔值
distinct 去重方法,无参数
limited 获取流中前n个数据
skip 获取丢弃前n个数据
map 对流中元素统一处理,参数Function接口
forEach 一个个处理流元素,参数Consumer接口
sorted 排序,可以无参数
max 获取最大值,参数Comparator接口
concat 合并流,参数两个Stream类

方法举例

filter、limit和distinct方法

 void test1(){
         List<String> list= Arrays.asList("qwe","rty","asd","asd","fgh");
         List<String> res = list.stream().filter(str -> str.contains("a")).distinct().limit(1).collect(Collectors.toList());
         System.out.println(res);//asd
     }

map方法,获取list包含a的字符的元素,并返回大写的集合

 void test1(){
         List<String> list= Arrays.asList("qwe","rty","asd","asd","fgh");
         List<String> res = list.stream().filter(str -> str.contains("a")).map(str->str.toUpperCase()).collect(Collectors.toList());
         System.out.println(res);//ASD
     }

max方法获取最大值

 Optional<Integer> max = Stream.of(1,2,3,4).max((o1, o2) -> o1 - o2);

三、终止符

anyMatch集合中是否有一个满足条件,布尔值,参数Predicate接口。其他还有allMatch,noneMatch
collect 收集流
reduce 参数 默认值,BiFunction接口,汇总处理的方法
count 统计流元素个数

reduce方法获取最大值

 Optional<Integer> reduce = Stream.of(1, 2, 3, 4).reduce((a, b) -> a > b ? a : b);
 System.out.println(reduce.get());

 

 

标签:Stream,System,接口,jdk8,参数,str,println,out,Lambda
来源: https://www.cnblogs.com/youisme/p/15335136.html

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

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

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

ICode9版权所有