0

0

java8常用内置函数的总结(代码示例)

不言

不言

发布时间:2019-03-07 17:50:07

|

4415人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于java8常用内置函数的总结(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

常用的函数接口记录方便以后翻吧

接口 参数 返回类型 说明
Predicate T boolean 输入某个值,输出boolean 值,用于对某值进行判定
Consumer T void 输入某值,无输出。用于消费某值
Function T R 输入某类型值,输出另种类型值,用于类型转化等
Supplier None T 无输入,输出某值,用于生产某值
UnaryOperator T T 输入某类型值,输出同类型值,用于值的同类型转化,如对值进行四则运算等
BinaryOperator (T,T) T 输入两个某类型值,输出一个同类型值,用于两值合并等
Predicates

Predicates是包含一个参数的布尔值接口。其包括一些缺省方法,组合他们使用可以实现复杂的业务逻辑(如:and, or, negate)。示例代码如下:

Predicate predicate = (s) -> s.length() > 0;
 
predicate.test("foo");              // true
predicate.negate().test("foo");     // false
 
Predicate nonNull = Objects::nonNull;
Predicate isNull = Objects::isNull;
 
Predicate isEmpty = String::isEmpty;
Predicate isNotEmpty = isEmpty.negate();
Functions

Functions接口接收一个参数并产生一个结果。其缺省方法通常被用来链接多个功能一起使用 (compose, andThen)。

Function toInteger = Integer::valueOf;
Function backToString = toInteger.andThen(String::valueOf);
 
backToString.apply("123");     // "123"
Suppliers

Suppliers接口生成一个给定类型结果。和Functions不同,其没有接收参数。

Supplier personSupplier = Person::new;
personSupplier.get();   // new Person
Consumers

Consumers表现执行带有单个输入参数的操作。

立即学习Java免费学习笔记(深入)”;

Consumer greeter = (p) -> System.out.println("Hello, " + p.firstName);
greeter.accept(new Person("Luke", "Skywalker"));
Comparators

Comparators是从java旧版本升级并增加了一些缺省方法。

Comparator comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName);
 
Person p1 = new Person("John", "Doe");
Person p2 = new Person("Alice", "Wonderland");
 
comparator.compare(p1, p2);             // > 0
comparator.reversed().compare(p1, p2);  // < 0

Stream 常用方法

创建Stream
  1. 将现有数据结构转化成Stream
Stream s = Stream.of(1, 2, 3, 4, 5);
Stream s = Arrays.stream(arr);
Stream s = aList.stream();
  1. 通过Stream.generate()方法:
// 这种方法通常表示无限序列
Stream s = Stream.generate(SuppLier s);
// 创建全体自然数的Stream
class NatualSupplier implements Supplier {
    BigInteger next = BigInteger.ZERO;
    @Override
    public BigInteger get() {
        next = next.add(BigInteger.ONE);
        return next;
    }
}
  1. 通过其他方法返回
Stream lines = Files.lines(Path.get(filename))
...
map方法

把一种操作运算映射到Stream的每一个元素上,从而完成一个Stream到另一个Stream的转换
map方法接受的对象是Function接口,这个接口是一个函数式接口:

 Stream map(Function mapper);


@FunctionalInterface
public interface Function {
    // 将T转换为R
    R apply(T t);
}

使用:

// 获取Stream里每个数的平方的集合
Stream ns = Stream.of(1, 2, 3, 4, 5);
ns.map(n -> n * n).forEach(System.out::println);
flatMap

map方法是一个一对一的映射,每输入一个数据也只会输出一个值。

flatMap方法是一对多的映射,对每一个元素映射出来的仍旧是一个Stream,然后会将这个子Stream的元素映射到父集合中:

Stream> inputStream = Stream.of(Arrays.asList(1), Arrays.asList(2, 3), Arrays.asList(4, 5, 6));
List integerList = inputStream.flatMap((childList) -> childList.stream()).collect(Collectors.toList());
//将一个“二维数组”flat为“一维数组”
integerList.forEach(System.out::println);
filter方法

filter方法用于过滤Stream中的元素,并用符合条件的元素生成一个新的Stream。
filter方法接受的参数是Predicate接口对象,这个接口是一个函数式接口:

Stream filter(Predicate) predicate;


@FunctionInterface
public interface Predicate   {
    // 判断元素是否符合条件
    boolean test(T t);
}

使用

// 获取当前Stream所有偶数的序列
Stream ns = Stream.of(1, 2, 3, 4, 5);
ns.filter(n -> n % 2 == 0).forEach(System.out::println);
limit、skip

limit用于限制获取多少个结果,与数据库中的limit作用类似,skip用于排除前多少个结果。

英特尔AI工具
英特尔AI工具

英特尔AI与机器学习解决方案

下载
sorted

sorted函数需要传入一个实现Comparator函数式接口的对象,该接口的抽象方法compare接收两个参数并返回一个整型值,作用就是排序,与其他常见排序方法一致。

distinct

distinct用于剔除重复,与数据库中的distinct用法一致。

findFirst

findFirst方法总是返回第一个元素,如果没有则返回空,它的返回值类型是Optional类型,接触过swift的同学应该知道,这是一个可选类型,如果有第一个元素则Optional类型中保存的有值,如果没有第一个元素则该类型为空。

Stream stream = users.stream();
Optional userID = stream.filter(User::isVip).sorted((t1, t2) -> t2.getBalance() - t1.getBalance()).limit(3).map(User::getUserID).findFirst();
userID.ifPresent(uid -> System.out.println("Exists"));
min、max

min可以对整型流求最小值,返回OptionalInt。

max可以对整型流求最大值,返回OptionalInt。

这两个方法是结束操作,只能调用一次。

allMatch、anyMatch、noneMatch

allMatch:Stream中全部元素符合传入的predicate返回 true

anyMatch:Stream中只要有一个元素符合传入的predicate返回 true

noneMatch:Stream中没有一个元素符合传入的predicate返回 true

reduce方法

reduce方法将一个Stream的每一个元素一次作用于BiFunction,并将结果合并。
reduce方法接受的方法是BinaryOperator接口对象。

Optional reduce(BinaryOperator accumulator);


@FuncationalInterface
public interface BinaryOperator extends BiFunction {
    // Bi操作,两个输入,一个输出
    T apply(T t, T u);
}

使用:

// 求当前Stream累乘的结果
Stream ns = Stream.of(1, 2, 3, 4, 5);
int r = ns.reduce( (x, y) -> x * y ).get();
System.out.println(r);

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.7万人学习

极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.7万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号