Java8——java.util.stream.Stream类方法总结

【java学习】java8新特性:stream、Lambda函数、接口的默认方法和类方法、函数式接口、Optional、DateTime 1,概念java.util.stream是java8新特性。 java.util.stream与java.io包里的 InputStream 和 OutputStream 是完全不同的概念。 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bul............ 阅读详情

java.util.stream.Stream

filter

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

按给定Predicate过滤并返回一个steam,这是一个中间操作

map

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

对每个元素都调用mapper.apply()方法,这是一个中间操作

mapToInt

IntStream mapToInt(ToIntFunction<? super T> mapper)

其中:ToIntFunction:

@FunctionalInterface
public interface ToIntFunction<T>{
    int applyAsInt(T value);
}

所以mapToInt方法会将元素转化为int类型,这个方法可以用来提取对象中的int类型属性值,或者将某个对象转换成int类型等操作,如:

List<Person> persons = Arrays.asList(
    new Person("张三",16,Person.Gender.Man),
    new Person("李四",26,Person.Gender.Man),
    new Person("王五",36,Person.Gender.Woman),
    new Person("郑六",46,Person.Gender.Man),
    new Person("田七",66,Person.Gender.Woman)
);
Stream<Person> stream = persons.stream();
// 提取出年龄并打印
stream.mapToInt(p -> p.getAge()).forEach(age -> log.info(String.valueOf(age)));

这是一个中间操作

mapToLong,mapToDouble

与mapToInt同理

flatMap

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

注意看mapper的类型是:Function<? super T,? extends Stream<? extends R>>

这意味着在遍历每个元素并对其调用mapper.apply()方法,该方法返回的是Stream类型的对象,然后对每一个Straem调用其map方法,将每个Stream里面的元素转移到flatMap方法返回的Stream对象中。

该方法用于提取Collection<Collection<T>>类型的数据,如:

List<String> innerL = Arrays.asList("a","b","c","d");
List<List<String>> outL = Arrays.asList(innerL,innerL,innerL);

Stream<String> finalStream = outL.stream().flatMap(
    list -> list.stream() //返回outL列表内每个元素的Stream
);// 对outL列表内每个元素的Stream调用map方法,提取其中的内容,并放入finalStream中
finalStream.forEach(log::info);

flatMapToInt,flatMapToLong,flatMapToDouble

flatMap + mapToXXX

distinct

Stream<T> distinct()

使用Object.equals(Object) 去重

sorted

Stream<T> sorted():

对元素进行自然排序,如果元素类型没有实现Comparable接口,将会抛出java.lang.ClassCastException异常

Stream<T> sorted(Comparator<? super T> comparator):

使用给定比较器进行排序

peek

Stream<T> peek(Consumer<? super T> action)

对元素进行给定的操作。

limit

Stream<T> limit(long maxSize)

设置最大元素个数

skip

Stream<T> skip(long n)

跳过前n个元素

forEach

void forEach(Consumer<? super T> action)

遍历每个元素并对其进行指定操作,不保证按照遍历顺序(encounter order)进行action.apply()操作

forEachOrdered

void forEachOrdered(Consumer<? super T> action)

遍历每个元素并对其进行指定操作,且按照遍历顺序依次操作一个元素。

toArray

Object[] toArray()

返回一个存放所有元素的Object数组

<A> A[] toArray(IntFunction<A[]> generator):

其中IntFunction:

@FunctionalInterface
public interface IntFunction<R>{
    R apply(int value)
}

这里toArray的用法是:

Person[] pers = persons.stream.toArray(i -> new Person[i]);
//或者是
Person[] pers = persons.stream.toArray(Person[]::new);

reduce

T reduce(T identity, BinaryOperator<T> accumulator)

其中:

@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T>{
    public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) {
        Objects.requireNonNull(comparator);
        return (a, b) -> comparator.compare(a, b) <= 0 ? a : b;
    }
    public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
        Objects.requireNonNull(comparator);
        return (a, b) -> comparator.compare(a, b) >= 0 ? a : b;
    }
}
@FunctionalInterface
public interface BiFunction<T, U, R> {
    R apply(T t, U u);
    default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t, U u) -> after.apply(apply(t, u));
    }
}

BinaryOperatior对对象进行二元操作,并返回一个相同类型的对象,如:

Person result = persons.stream().reduce(new Person("小二",33,Person.Gender.MAN),(p1,p2)->p1.getAge() > p2.getAge()?p1:p2);

上面的操作与使用一趟冒泡排序从“小二”开始与persons列表进行比较,找出年龄最大的Person对象。

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

与第一个方法类似

collect

<R> R collect(Supplier<R> supplier,BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)

其中,BiConsumer与BiFunction差不多,也是二元操作,但是没有返回值。

所以:collect也与reduce类似,但是所有的accumulator操作都是在更新对象的状态,并不会反回一个对象,例如:

Person result = stream.collect(Person::new,(p1,p2)->p1.setSalary(p1.getSalary()+p2.getSalary()),(p1,p2)->p1.setSalary(p1.setSalary()+p2.setSalary()));
log.info(String.valueOf(result.getAge()));

上面新建了一个Person对象,并且其工资为列表中所有Person对象工资之和。

min,max,count

按指定比对方法获取所有元素中的最大、最小元素,获取元素的个数

anyMatch,allMatch,noneMatch

按照给定的Predicate,判断是否有元素匹配、是否所有元素匹配或是否所有元素都不匹配

findFirst

返回一个Optional,其中包含Stream的第一个元素,如果Stream为empty,则返回一个空的Optional

findAny

返回一个包含任意元素的Optional

empty

返回一个空的连续的Stream

of

static <T> Stream<T> of(T t)

返回一个包含一个元素的Stream

static <T> Stream<T> of(T... values)

返回包含指定元素的Stream

DSP28377内存不够用?手把手教你合并RAM/FLASH块,解决CCS20链接器报错 本文详细介绍了在CCS20开发环境中解决DSP28377内存不足问题的方法,通过合并RAM/FLASH块优化CMD文件配置,有效解决链接器报错。文章包含内存布局对比、改写步骤、FreeRTOS集成注意事项及调试技巧,帮助开发者提升内存利用率与项目性能。 阅读详情

相关推荐

深入Luckfox Pico的Web界面:从Angular前端到CGI后端的RV1106 IPCWeb全栈解析

本文深入解析了基于瑞芯微RV1106芯片的Luckfox Pico设备上,IPCWeb全栈解决方案的架构与部署。详细介绍了如何通过SDK编译配置,将现代Angular前端框架与高效的C++ CGI后端结合,并利用nginx和FastCGI在嵌入式环境中构建稳定、高性能的Web管理界面,为物联网设备开发提供了完整的实战参考。

3a9bq4r8t2y的博客 277

java.util.stream.Stream详解

java.util.stream.Stream详解

沐雨橙风ιε的博客 1537

西门子840D新建项目

1、需要一个32位的WIN7或者XP系统,并且已经在系统中安装完成西门子840Dsl开发包和VS2008。(我采用的是XP系统虚拟机) 2、在开始->所有程序找到如下位置 3、在这个位置打开Visual Studio 4、文件->新建->项目 名称和位置都可以随意更改,点击确定。 5、在左侧选择第二个选项进入下面的界面 点击“Add Screen”按钮 可以修改“class name”然后点击“OK”返回上一个界面,再点击“Add Form” 可以修...

qq_36987047的博客 1861

Java 8 - java.util.stream - Stream接口

确切地说,Stream接口定义了对数据进行流式操作的方法,并提供了中间操作和终端操作,用于处理、转换和聚合数据流。

学无止境 1272

手把手教你安装 Vivado2022.2(附安装包)

Vivado 2022.2版本与之前的版本相比,具有以下几个显著的优势:电源设计管理器(PDM):Vivado 2022.2引入了全新的电源设计管理器(PDM),这是一个下一代功耗评估平台,为Versal® 和 Kria™ SOM提供了准确一致的功耗估计能力。PDM是Versal产品家族的首选功耗评估工具,为Versal ACAP硬IP块提供增强向导,简化从XPE向PDM的迁移,帮助用户获得准确的功耗评估。

dpwkj的博客 2万+

基于STM32F103的二维码识别项目——OV7670篇

此系列用于记录做过的项目,这篇文章介绍基于STM32F103的二维码识别项目之OV7670FIFO模块。

beyourself_he的博客 4289

java.util.stream 简介

java.util.stream 是 Java 8 引入的新内容,提供以函数式的风格对流数据进行操作。 简单示例: public static void fileStream(Collection<File> files) { Predicate<File> predicate = new Predicate<File>() { @Overr...

崔显龙的博客 1262

从零构建HFSS连接器仿真模型:以SMP接口的精准复现为例

本文详细介绍了如何从零构建HFSS连接器仿真模型,以SMP接口的精准复现为例。通过获取官方模型、导入技巧、信号路径提取和介质结构复现等步骤,帮助工程师避免常见错误,提升高频电路仿真的准确性。文章特别强调了模型精度对仿真结果的影响,并提供了实用的调试和管理建议。

weixin_29041767的博客 430

java.util.stream.Stream

Stream

底层码农 6985

ANSYS专题-利用ANSYS SIwave进行PCB板的EMS仿真

本文详细描述了使用ANSYSSIwave进行电路板电磁敏感度(EMS)仿真的完整流程。主要步骤包括:导入AD软件生成的IPC2581文件,检查PCB叠层和电路参数,为敏感网络设置50欧姆端口并指定GND为参考网络,进行验证检查后设置频段范围和入射波类型(单/多入射、极化方式等),最后启动仿真并查看选定网络的EMS感应电压曲线。该过程提供了从文件准备到结果分析的全套操作指南,适用于评估电路板在电磁干扰环境下的性能表现。

whm128的博客 3600

虚幻商城 Quixel 免费资产一键入库

在免费领取所有Megascans之后,我们只是有了获取 Quixel Megascans 资产的资格,但是没有入 Fab 库,本文将讲解通过脚本将 Quixel 所有资产入库 Fab。

一碗清深的博客 3338

Java 8 新特性|java.util.stream.Collectors

Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作。 1、 Collectors.averagingDouble() Collectors.averagingDouble() 方法将流中的所有元素视为 double 类型并计算他们的平均值。该方法返回的是同一个 Collectors 实例,因此可以进行链

Java小技巧 5204

机器人在果园内行巡检仿真(2D雷达、realsense相机)

DiffBot是一种具有两个轮子的自主差动驱动机器人。它的主要处理单元是一个运行Ubuntu Mate 20.04和ROS 1 (ROS Noetic)中间件的Raspberry pi4b。该存储库包含ROS驱动包、真实机器人的ROS控制硬件接口和模拟DiffBot的配置。修改配置文件orchard_world.launch。

如果想成为中心,那么就到中心去吧。 1312

java.util.stream找不到_对java.util.stream库的介绍

Java SE 8中的主要新语言功能是lambda表达式。您可以将lambda表达式视为匿名方法;类似方法,lambdas键入了参数,一个body和一个返回类型。但是真正的消息并不是lambda表达自己,而是它们能够实现的。Lambdas可以轻松地将行为表达为数据,从而可以开发更具表现力和更强大的库。在Java SE 8中也引入了一个这样的库,它是一个java.util.stream包(Strea...

weixin_42285866的博客 903

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java.util.stream是哪个包_java.util.stream 库简介

Java Stream简介Java SE 8 中主要的新语言特性是拉姆达表达式。可以将拉姆达表达式想作一种匿名方法;像方法一样,拉姆达表达式具有带类型的参数、主体和返回类型。但真正的亮点不是拉姆达表达式本身,而是它们所实现的功能。拉姆达表达式使得将行为表达为数据变得很容易,从而使开发具有更强表达能力、更强大的库成为可能。Java SE 8 中引入的一个这样的库是java.util.stream...

weixin_29890919的博客 828

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java 8 - java.util.stream - 总结

确切地说,Stream接口定义了对数据进行流式操作的方法,并提供了中间操作和终端操作,用于处理、转换和聚合数据流。super T> predicate):根据指定的条件筛选元素。super T,?extends R> mapper):将元素映射为另一种类型。super T,?extends R>> mapper):将元素映射为流,并将多个流合并成一个流。distinct():去除重复的元素。sorted():对元素进行排序。终端操作方法super T> action):对每个元素执行指定的操作。

学无止境 1191

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java.util.stream是哪个包_Java流库详解(java.util.stream)

Java流库(java.util.stream)流提供了一种让我们可以在比集合更高的概念级别上指定计算的数据视图。通过使用流,我们可以说明想要完成什么任务,而不是说明如何去实现它。(这一点受益于lambda表达式)我们将操作的调度留给具体的实现去解决。流大量的用到了lambda表达式(同根生于Java8)之后的篇幅将会说到lambda表达式一、 流的特点流的特点流并不储存元素。这些元素可能存储在底...

weixin_32503491的博客 1274

[Java 8 Lambda] java.util.stream 简介

包结构如下所示: 这个包的结构很简单,类型也不多。   BaseStream接口 所有Stream接口类型的父接口,它继承自AutoClosable接口,定义了一些所有Stream都具备的行为。   因为继承自AutoClosable接口,所以所有的Stream类型都可以用在Java 7中引入的try-with-resource机制中,以达到自动关闭资源

不忘初心,好好沉淀 9754

java——集合篇——java.util.stream.Stream

简单了解为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专...

血师注 1240

Java学习九—常用包(类)之java.util包

`java.util` 包是Java标准类库中的一个非常重要的组成部分,它提供了一系列对程序开发非常有用的类和接口。这个包主要包含集合框架、日期时间类、事件模型、随机数生成器以及其他实用工具类。

qq_17153885的博客 1万+

Java8:Stream概念

参考:Java 8 Stream Tutorial 什么是流、管道/Pipelinin、惰性/ laziness、部分地构造、流的一次性

yqj2065的博客 3087

从Java 8中的java.util.stream.Stream检索列表

I was playing around with Java 8 lambdas to easily filter collections. 我在玩Java 8 lambda来轻松过滤集合。 But

asdfgh0077的博客 255

Java8 Stream Collectors 使用

前言: java.util.stream.Collectors.* 类为我们提供了丰富的对流的操作,对此写了一些较为测试案例: import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.ConcurrentMap; import static java.util.Compara...

湖人•总冠军 7089

详解Java8 Collect收集Stream的方法

转载自:https://www.jb51.net/article/138519.htm 这篇文章主要介绍了Java8-Collect收集Stream的方法,提到了收集器的作用,连接收集器的方法,需要的朋友可以参考下 Collection, Collections, collect, Collector, Collectos Collection是Java集合的祖先接口。 Collection...

johnhuster的专栏 8462

java.util.stream找不到,在java8中找不到java.util.stream

I have installed jdk-8-ea-bin-b82-windows-x64-21_mar_2013 and IntelliJ IDEA 12.0.4. The strange thing is that I can't find java.util.stream in the intellisense provided by the IDE. I tried to compile ...

weixin_42307478的博客 527

Java8 Stream

Java8 Stream1 stream介绍1.1 什么是Stream?2 实现2.1 Stream可以通过集合数组创建2.2 Optional2.3 代码案例 1 stream介绍 1.1 什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 Stream可以由数组或集合创建,对流的操作分为两种: 中间操作,每次返回一个新的流,可以有多个。 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法

qq_42688149的博客 491
上一篇: Laravel—数据库操作与Eloquent模型使用总结
下一篇: JDBC Driver是如何自动注册的
风萧水丶寒
博客等级 码龄11年 6粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值