目录
Predicates
Functions
Suppliers
Consumers
Comparators
Stream 常用方法
创建Stream
map方法
flatMap
filter方法
limit、skip
sorted
distinct
findFirst
min、max
allMatch、anyMatch、noneMatch
reduce方法
首页 Java java教程 java8常用内置函数的总结(代码示例)

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

Mar 07, 2019 pm 05:50 PM
java java8 stream

本篇文章给大家带来的内容是关于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)。示例代码如下:

1

2

3

4

5

6

7

8

9

10

Predicate<String> predicate = (s) -> s.length() > 0;

  

predicate.test("foo");              // true

predicate.negate().test("foo");     // false

  

Predicate<Boolean> nonNull = Objects::nonNull;

Predicate<Boolean> isNull = Objects::isNull;

  

Predicate<String> isEmpty = String::isEmpty;

Predicate<String> isNotEmpty = isEmpty.negate();

登录后复制
Functions

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

1

2

3

4

Function<String, Integer> toInteger = Integer::valueOf;

Function<String, String> backToString = toInteger.andThen(String::valueOf);

  

backToString.apply("123");     // "123"

登录后复制
Suppliers

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

1

2

Supplier<Person> personSupplier = Person::new;

personSupplier.get();   // new Person

登录后复制
Consumers

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

1

2

Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName);

greeter.accept(new Person("Luke""Skywalker"));

登录后复制
Comparators

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

1

2

3

4

5

6

7

Comparator<Person> 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

1

2

3

Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);

Stream<Integer> s = Arrays.stream(arr);

Stream<Integer> s = aList.stream();

登录后复制
  1. 通过Stream.generate()方法:

1

2

3

4

5

6

7

8

9

10

11

// 这种方法通常表示无限序列

Stream<T> s = Stream.generate(SuppLier<T> s);

// 创建全体自然数的Stream

class NatualSupplier implements Supplier<BigInteger> {

    BigInteger next = BigInteger.ZERO;

    @Override

    public BigInteger get() {

        next = next.add(BigInteger.ONE);

        return next;

    }

}

登录后复制
  1. 通过其他方法返回

1

2

Stream<String> lines = Files.lines(Path.get(filename))

...

登录后复制
map方法

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

1

2

3

4

5

6

7

8

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

 

 

@FunctionalInterface

public interface Function<T, R> {

    // 将T转换为R

    R apply(T t);

}

登录后复制

使用:

1

2

3

// 获取Stream里每个数的平方的集合

Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);

ns.map(n -> n * n).forEach(System.out::println);

登录后复制
flatMap

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

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

1

2

3

4

Stream<List<Integer>> inputStream = Stream.of(Arrays.asList(1), Arrays.asList(2, 3), Arrays.asList(4, 5, 6));

List<Integer> integerList = inputStream.flatMap((childList) -> childList.stream()).collect(Collectors.toList());

//将一个“二维数组”flat为“一维数组”

integerList.forEach(System.out::println);

登录后复制
filter方法

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

1

2

3

4

5

6

7

8

Stream<T> filter(Predicate<? super T>) predicate;

 

 

@FunctionInterface

public interface Predicate<T>   {

    // 判断元素是否符合条件

    boolean test(T t);

}

登录后复制

使用

1

2

3

// 获取当前Stream所有偶数的序列

Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);

ns.filter(n -> n % 2 == 0).forEach(System.out::println);

登录后复制
limit、skip

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

sorted

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

distinct

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

findFirst

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

1

2

3

Stream<User> stream = users.stream();

Optional<String> 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接口对象。

1

2

3

4

5

6

7

8

Optional<T> reduce(BinaryOperator<T> accumulator);

 

 

@FuncationalInterface

public interface BinaryOperator<T> extends BiFunction<T, T, T> {

    // Bi操作,两个输入,一个输出

    T apply(T t, T u);

}

登录后复制

使用:

1

2

3

4

// 求当前Stream累乘的结果

Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);

int r = ns.reduce( (x, y) -> x * y ).get();

System.out.println(r);

登录后复制


以上是java8常用内置函数的总结(代码示例)的详细内容。更多信息请关注PHP中文网其他相关文章!

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP与Python:核心功能 PHP与Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP的影响:网络开发及以后 PHP的影响:网络开发及以后 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP:许多网站的基础 PHP:许多网站的基础 Apr 13, 2025 am 12:07 AM

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP与Python:用例和应用程序 PHP与Python:用例和应用程序 Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

See all articles