学习笔记-java函数式编程
admin
2024-02-10 11:05:42
0

lambda

案例

案例1

new Threaad(new Runable(){public void run(){System.out.println("xxx"):}
}).start();
new Thread(()->{System.out.println("xxx");}
).star();

案例2

public static int calculateNum(IntBinaryOperator operator){int a = 10;int b = 200;return operator.applyAsInt(a,b);
}
public void main(String[] args){calculateNum( (a,b)-> a*b );
}

案例3

public static void printNum(Inpredicate predicate){int[] arr = {1,2,3,4,5,6,7,8,9,10};for(int i: arr){if(predicate.test(i)){System.out.println(i);}}
}public void main(String[] args){printNum(x->{return x%2==0;})
}

案例4

public static  R typeConver(Function function){String str = "12345";R result = function.apply(str);return result;
}public void main(String[] args){Integer result = typeConver(x->Integer.valueOf(x));
}

案例5

public static void foreachArr(IntConsumer consumer){int[] arr = {1,2,3,4,5,6,7,8};for(int i:arr){consumer.accept(i);}
} public void main(String[] args){foreachArr(x->System.out.println(x));
}

Stream

案例

  • 数据准备
public class Author{private Long id;private String name;private Integer age;private String intro;private List books;
}public class Book{private Long id;private String name;private String category;private Integer score;private String intro;
}
private static List getAutors(){Author a1 = new Author(1l,"xx",22,"xxx",null);Author a2 = new Author(2l,"xx",33,"xxx",null);Author a3 = new Author(3l,"xx",44,"xxx",null);Author a4 = new Author(4l,"xx",55,"xxx",null);List b1 = new ArrayList<>();List b2 = new ArrayList<>();List b3 = new ArrayList<>();b1.add(new Book(1l,"xxxx","xxx",88,"xxxxxxxxx"));b1.add(new Book(2l,"xxxx","xxx",89,"xxxxxxxxx"));b1.add(new Book(3l,"xxxx","xxx",90,"xxxxxxxxx"));b2.add(new Book(4l,"xxxx","xxx",91,"xxxxxxxxx"));b2.add(new Book(5l,"xxxx","xxx",92,"xxxxxxxxx"));b2.add(new Book(6l,"xxxx","xxx",95,"xxxxxxxxx"));b3.add(new Book(7l,"xxxx","xxx",98,"xxxxxxxxx"));b3.add(new Book(8l,"xxxx","xxx",99,"xxxxxxxxx"));b3.add(new Book(9l,"xxxx","xxx",100,"xxxxxxxxx"));a1.setBooks(b1);a2.setBooks(b2);a3.setBooks(b3);a4.setBooks(b3);List authorList = new ArrayList<>(Arrays.asList(a1,a2,a3,a4));return authorList;}

创建流

// 年龄小于18 去重 打印
List authors = getAuthors();
authors.stream().distinct().filter(x->x.getAge()<18).forEach(x->System.out.println(x.getName()));// 数组创建
Integer[] arr = {1,2,3,4,5};
Arrays.stream(arr).distinct().forEach(x->System.out.println(x));
Stream.of(arr);
// Set
HashMap map=new HashMap<>();
Set> set=map.entrySet();
set.stream();
// Map
Map map = new HashMap();
map.entrySet().stream();

中间操作

// filter
// 打印姓名长度大于1
authors.stream().filter(x->x.getName().length()>1).forEach(x->System.out.println(x.getName()));// map
// 打印所有姓名
authors.stream().forEach(x->System.out.println(x.getName()));
authors.stream().map(x->x.getName()).forEach(x->System.out.println(x));// distinct
// 打印所有姓名 去重
authors.stream().distinct().map(x->x.getName()).forEach(x->System.out.println(x));// sorted
// 姓名去重 年龄排序
// implements Comparable
// public int compareTo(Author o){} 
authors.stream().distinct().sorted((a,b)->a.getAge()-b.getAge()).forEach(x->System.out.println(x.getAge() ));// limit
// 排序后限制2个
authors.stream().distinct().sorted((a,b)->a.getAge()-b.getAge()).limit(2).forEach(x->System.out.println(x.getName() ));// skip
// 排序 跳过1个
authors.stream().distinct().sorted((a,b)->b.getAge()-a.getAge()).skip(1).forEach(x->System.out.println(x.getName() ));// flatMap
authors.stream().flatMap(x->x.getBooks().stream()).distinct().forEach(x->System.out.println(x.getName() );

终结操作

// forEach
authors.stream().forEach(x->System.out.println(x.getName()));// count
authors.stream().flatMap(x->x.getBooks().stream()).distinct().count();// min max
authors.stream().distinct().flatMap(x->x.getBooks().stream()).map(x->x.getSocre()).max((a,b)->a-b).get();
authors.stream().distinct().flatMap(x->x.getBooks().stream()).map(x->x.getSocre()).min((a,b)->a-b).get();// collect
// list
authors.stream().map(x->x.getName()).collect(Collectors.toList());
// set
authors.stream().map(x->x.getName()).collect(Collectors.toSet());
// map
authors.stream().collect(Collectors.toMap(x->x.getName(),x->x.getBooks())) ;// anyMatch
authors.stream().anyMatch(x->x.getAge()>10);// allMatch
authors.stream().allMatch(x->x.getAge()>10);// noneMatch
authors.stream().noneMatch(x->x.getAge()>10);// findAny
// 随机获取
authors.stream().filter(x->x.getAge()>18).findAny();// findFirst
authors.stream().sorted((a,b)->a.getAge()-b.getAge()).findFirst();// reduce
// 求和
authors.stream().distinct().map(x->x.getAge()).reduce(0,(a,b)->a+b);
// 最大值
authors.stream().distinct().map(x->x.getAge()).reduce(0,(a,b)->a>b?a:b);
authors.stream().distinct().map(x->x.getAge()).reduce((a,b)->a>b?a:b);
// 最小值
authors.stream().distinct().map(x->x.getAge()).reduce(100,(a,b)->a>b?b:a);
authors.stream().distinct().map(x->x.getAge()).reduce((a,b)->a>b?b:a);

optional

创建

// 不确定author是否为空
Optional op = Optional.ofNullable(author);
// 确定object不为空
Optional.of(object);
// 返回空
Optional.empty()''

操作

// 如果存在
op.ifPresent(x->System.out.println(x.getName()));// 获取 
// 如果没有 创建默认值
op.orElseGet(()->new Author());
// 如果没有 抛出异常
op.orElseThrow(()->new Exception("xxx"));// 过滤
// 返回一个OPtional对象
op.fliter(x->x.getAge()>18);// 判断
op.isPresent();// 数据转换
op.map(x->x.getBooks()).ifPresent(x->System.out.println(x.size());

函数式接口

  • 注解

    • @FunctionalInterface
  • 接口

    • Consumer
      • void accept(T t)
      • BiConsumer
        • void accept(T t,U u)
    • Function
      • R apply(T t)
      • BiFunction
        • R accept(T t,U u)
    • Predicate
      • boolean test(T t)
      • BiPredicate
        • boolean accept(T t,U u)
    • Supplier
      • T get()
      • BooleanSupplier
        • boolean getAsBoolean()
  • 默认方法

// Predicate and()
authors.stream().filter((x->x.getAge()>17).and(x->x.getName().length()>1)).forEach(x->System.out.println(x.getAge()));
// Predicate negate()
// 取反
// 取不大于17
authors.stream().filter((x->x.getAge()>17).negate()).forEach(x->System.out.println(x.getAge()));

方法引用

  • 类名或对象名::方法名
    • 不会的话可以使用idea自动生成。。。

数据类型转换

// mapToInt
authors.stream().mapToInt(x->x.getAge()).fotEach(System.out::println);

并行流

// parallel() 开启并行流
// 或直接list.parallelStream()
// peek() 调试
Stream stream = Stream.of(1,2,3,4,5,6,7,8,9);
stream.parallel().peek(x->System.out.println(x+Thread.currentThread().getName())).filter(x->x>5).reduce((result,ele)->result+ele).get();

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...