当前位置: 首页 > news >正文

JUC并发编程_四大函数式接口和 Stream 流式计算

JUC并发编程_四大函数式接口和 Stream 流式计算

    • 四大函数式接口
      • Function 接口
      • Predicate 接口
      • Consumer 接口
      • Supplier 接口
    • Stream 流式计算
      • Stream 的中间操作
        • filter:过滤流中的元素,只保留满足条件的元素
        • map:对流中的每个元素应用一个函数,并将结果收集到一个新的流中
        • sorted:对流中的元素进行排序
        • distinct:去除流中的重复元素
        • limit:获取流中的前N个元素
        • skip:跳过流中的前N个元素
      • Stream 的终端操作
        • forEach:对流中的每个元素执行一个操作
        • collect:将流中的元素收集到一个List、Set或Map中
        • count:统计流中的元素数量
        • min/max:查找流中的最小或最大元素
        • reduce:通过某种计算将流中的所有元素组合起来,得到一个值

四大函数式接口

Function 接口

接受一个输入参数并返回结果。主要用于转换数据,比如字符串转大写、数字加一等。
方法:R apply(T t)

Function<String, String> function = (String str) -> {if (StrUtils.isNotEmpty(str)) {return str;} else {return "";}
};
System.out.println(function.apply("blu"));

Predicate 接口

方法:boolean test(Object o)
接受单个输入参数并返回布尔值结果。主要用于条件判断,比如检查字符串是否为空、数字是否大于某个值等。

Predicate predicate = (Predicate<String>) str -> StrUtils.isEmpty(str);
System.out.println(predicate.test("blu"));

Consumer 接口

方法:void accept(T t)
接受单个输入参数但不返回任何结果,主要用于执行某些操作,比如打印日志、发送数据等。

Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("blu");

Supplier 接口

方法:T get()
不接受任何参数但返回某种类型结果,主要用于提供数据,比如生成随机数、获取当前时间等。

Supplier<Integer> supplier = () -> {Random random = new Random();//生成0-100的随机整数return random.nextInt(101);
};
System.out.println(supplier.get());

Stream 流式计算

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("4");
list.add("");
list.stream().filter(s -> {return !s.isEmpty();}).filter(s -> {return Integer.parseInt(s) > 2;}).map(s -> {return Integer.parseInt(s);}).sorted(Comparator.reverseOrder()).distinct().limit(1).forEach(i -> {System.out.println(i * 100);});

Stream 的中间操作

filter:过滤流中的元素,只保留满足条件的元素
Stream<T> filter(Predicate<? super T> predicate);
map:对流中的每个元素应用一个函数,并将结果收集到一个新的流中
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
sorted:对流中的元素进行排序
Stream<T> sorted(Comparator<? super T> comparator);
distinct:去除流中的重复元素
Stream<T> distinct();
limit:获取流中的前N个元素
Stream<T> limit(long maxSize);
skip:跳过流中的前N个元素
Stream<T> skip(long n);

Stream 的终端操作

forEach:对流中的每个元素执行一个操作
stream.forEach(i -> {//do Something
});
collect:将流中的元素收集到一个List、Set或Map中
stream.collect(Collectors.toList());
count:统计流中的元素数量
long count = stream.count();
min/max:查找流中的最小或最大元素
stream.min(Comparator.comparing(i -> {return i;
}));
reduce:通过某种计算将流中的所有元素组合起来,得到一个值

求和

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

字符串拼接

List<String> strs = Arrays.asList("B", "L", "U");
String all = strs.stream().reduce("Hello ", (s, s2) -> s + s2);

http://www.mrgr.cn/news/35445.html

相关文章:

  • [智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备]
  • 第8章利用CSS制作导航菜单
  • 《实时流计算系统设计与实现》-Part 2-笔记
  • 如何使用Django写个接口,然后postman中调用
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 【时间之外】IT人求职和创业应知【31】
  • JetBrains系列产品无限重置免费试用方法
  • 35岁程序员转行大模型岗位:详细学习路线,从零基础到精通2024最新
  • input文本框随其中内容而变化长
  • 【React】(推荐项目)使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024)
  • QT Creator cmake 自定义项目结构, 编译输出目录指定
  • 用canvas画一个验证码
  • 第十五章 文件上传
  • 自动化学习3:日志记录及测试报告的生成--自动化框架搭建
  • 【LinuxC高级】汇总
  • 【Linux】多线程:线程池的创建、日志类、RAII互斥锁、单例模式:饿汉方式与懒汉方式
  • 【Java】内部类【主线学习笔记】
  • 【微服务即时通讯系统】——etcd一致性键值存储系统,etcd的介绍,etcd的安装,etcd使用和功能测试
  • 【爬虫】PlayWright使用说明
  • 38.重复的子字符串
  • AI大模型行业应用:企业如何走出一条智能化蜕变之路?
  • 【字符串】介绍
  • 关于YOLOX的一些优势
  • java是干什么的
  • keepalived+lvs集群
  • 屏幕演示工具 | 水豚鼠标助手 v1.0.7