当前位置: 首页 > 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

相关文章:

  • 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