import java.time.LocalDate; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.Test; import pojo.Employee; public class StreamTerminalTest { Employee[] e = { new Employee("张三", 500.0, 25, LocalDate.of(1995, 03, 07)), new Employee("李四", 400.0, 20, LocalDate.of(1999, 01, 13)), new Employee("王五", 700.0, 23, LocalDate.of(1997, 11, 27)), new Employee("赵六", 900.0, 26, LocalDate.of(1994, 07, 06)), new Employee("阿七", 400.0, 22, LocalDate.of(1998, 10, 19)), new Employee("阿七", 400.0, 22, LocalDate.of(1998, 10, 19)) }; // 终端操作(不返回Stream类的对象) // long count() 获取流的长度 @Test public void countTest() { List<Employee> list = Arrays.asList(e); long count = list.stream().count(); System.out.println(count); } 输出: 6 /* * Optional<T> max(Comparator<? super T> comparator) * 根据Comparator指定条件获取流中最大的元素的Optional,所谓的最大值就是重新进行排序的, max就是取重新排序后的最后一个元素的Optional */ @Test public void MaxTest() { List<Employee> list = Arrays.asList(e); //年龄最大的 Optional<Employee> max = list.stream().max((x, y) -> x.getAge().compareTo(y.getAge())); System.out.println(max.get()); } 输出: Employee [name=赵六, salary=900.0, age=26, hireDay=1994-07-06] /* * Optional<T> min(Comparator<? super T> comparator) * 根据Compator指定条件获取流中最小的元素的Optional,所谓的最小值就是重新进行排序的, min就是取重新排序后的第一个元素的Optional */ @Test public void MinTest() { List<Employee> list = Arrays.asList(e); Optional<Employee> min = list.stream().min((x, y) -> x.getAge().compareTo(y.getAge())); System.out.println(min.get()); } 输出: Employee [name=李四, salary=400.0, age=20, hireDay=1999-01-13] /* * boolean allMatch(Predicate<? super T> predicate) * 判断流中的元素是否都满足指定的条件,全部满足返回true,否则返回false */ @Test public void allMatchTest() { List<Employee> list = Arrays.asList(e); boolean allMatch = list.stream().allMatch((e) -> e.getAge() == 20); System.out.println(allMatch); } 输出: false /* * boolean anyMatch(Predicate<? super T> predicate) * 判断流中的元素是否都满足指定的条件,至少有一条满足返回true,否则返回false boolean */ @Test public void anyMatchTest() { List<Employee> list = Arrays.asList(e); boolean allMatch = list.stream().anyMatch((e) -> e.getAge() == 20); System.out.println(allMatch); } 输出: true /* * noneMatch(Predicate<? super T> predicate) * 判断流中的元素是否都满足指定的条件,如果所有元素都不满足条件,返回true;否则返回false. */ @Test public void noneMatchTest() { List<Employee> list = Arrays.asList(e); boolean allMatch = list.stream().noneMatch((e) -> e.getAge() < 20); System.out.println(allMatch); } 输出: true // Optional<T> findFirst() 返回流中的第一个元素的Optional,如果流为空,则返回一个空的Optional。 @Test public void findFirstTest() { List<Employee> list = Arrays.asList(e); Optional<Employee> first = list.stream().findFirst(); System.out.println(first); } 输出: Optional[Employee [name=张三, salary=500.0, age=25, hireDay=1995-03-07]] /* * Optional<T> findAny() 返回流中的某个元素的Optional,如果流为空,则返回一个空的Optional。 * 串行流中返回第一个元素,并行流中会自由的选择流中的任意一个元素。 */ @Test public void findAnyTest() { List<Employee> list = Arrays.asList(e); Optional<Employee> first = list.stream().findAny(); System.out.println(first); } 输出: Optional[Employee [name=张三, salary=500.0, age=25, hireDay=1995-03-07]] // forEach(Consumer<? super T> action) 遍历流中的所有元素 @Test public void forEachTest() { List<Employee> list = Arrays.asList(e); Stream stream = list.stream(); stream.forEach(System.out::println); } 输出: Employee [name=张三, salary=500.0, age=25, hireDay=1995-03-07] Employee [name=李四, salary=400.0, age=20, hireDay=1999-01-13] Employee [name=王五, salary=700.0, age=23, hireDay=1997-11-27] Employee [name=赵六, salary=900.0, age=26, hireDay=1994-07-06] Employee [name=阿七, salary=400.0, age=22, hireDay=1998-10-19] Employee [name=阿七, salary=400.0, age=22, hireDay=1998-10-19] /* * forEachOrdered(Consumer<? super T> action) 遍历流中的所有元素 * 不同与forEach()的是,在使用并行流时,仍然按照初始流时元素的顺序遍历。 */ @Test public void forEachOrderedTest() { List<Employee> list = Arrays.asList(e); list.stream().forEachOrdered(System.out::println); } 输出: Employee [name=张三, salary=500.0, age=25, hireDay=1995-03-07] Employee [name=李四, salary=400.0, age=20, hireDay=1999-01-13] Employee [name=王五, salary=700.0, age=23, hireDay=1997-11-27] Employee [name=赵六, salary=900.0, age=26, hireDay=1994-07-06] Employee [name=阿七, salary=400.0, age=22, hireDay=1998-10-19] Employee [name=阿七, salary=400.0, age=22, hireDay=1998-10-19] /* * Optional<T> reduce(BinaryOperator<T> accumulator) * <U> U reduce(T identity,BinaryOperator<T> accumulator) * <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner); * 将流中的元素反复结合起来,获得一个值 */ @Test public void reduceTest1() { List<Employee> list = Arrays.asList(e); //最大薪资 Optional<Employee> reduce = list.stream().reduce((x, y) -> { System.out.println("x:" + x.getName() + "y:" + y.getName()); return x.getSalary().compareTo(y.getSalary()) > 0 ? x : y; }); System.out.println(reduce.get()); } 输出: x:张三y:李四 x:张三y:王五 x:王五y:赵六 x:赵六y:阿七 x:赵六y:阿七 Employee [name=赵六, salary=900.0, age=26, hireDay=1994-07-06] @Test public void reduceTest2() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // 将0传进x与y(流中的每个元素)进行指定的操作(求总和) Integer reduce = list.stream().reduce(0, (x, y) -> { System.out.println("x:" + x + "y:" + y); return x + y; }); System.out.println(reduce); } 输出: x:1y:2 x:3y:3 x:6y:4 x:10y:5 15 @Test public void reduceTest3() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // 串行流中第三个参数不起作用 Integer reduce = list.stream().reduce(0, (x, y) -> { System.out.println("BiFunction x:" + x + "y:" + y); return x + y; }, (x, y) -> { System.out.println("BinaryOperator x:" + x + "y:" + y); return x + y; }); System.out.println(reduce); } 输出: BiFunction x:0y:1 BiFunction x:1y:2 BiFunction x:3y:3 BiFunction x:6y:4 BiFunction x:10y:5 15 //Object[] toArray() 将流转化为数组 @Test public void toArrayTest() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Object[] array = list.stream().toArray(); for (Object object : array) { System.out.println(object); } } 输出: 1 2 3 4 5 /* * <R, A> R collect(Collector<? super T, A, R> collector) * 收集器操作,收集器操作,可以当做是一种更高级的归约操作 */ @Test public void collectionTest() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> collectList = list.stream().collect(Collectors.toList()); System.out.println("list:"+collectList); Map<Integer, Integer> map = list.stream().collect(Collectors.toMap(Integer::new, Integer::new)); System.out.println("map:"+map); System.out.println("==================="); // 平均值 Double avg = list.stream().collect(Collectors.averagingInt(Integer::new)); System.out.println("平均值:" + avg); // 最大值 Optional<Integer> max = list.stream().collect(Collectors.maxBy(Integer::compareTo)); System.out.println("最大值:" + max.get()); // 总结统计 IntSummaryStatistics intSummary = list.stream().collect(Collectors.summarizingInt(Integer::new)); System.out.println("最大值:" + intSummary.getMax()); System.out.println("最小值:" + intSummary.getMin()); System.out.println("总值:" + intSummary.getAverage()); System.out.println("平均值:" + intSummary.getSum()); System.out.println("总数:" + intSummary.getCount()); } 输出: list:[1, 2, 3, 4, 5] map:{1=1, 2=2, 3=3, 4=4, 5=5} =================== 平均值:3.0 最大值:5 最大值:5 最小值:1 总值:3.0 平均值:15 总数:5 }
相关推荐
它可以用来读取、写入或操作任何类型的二进制数据,如图像数据。 3. **byte**:在C#中,byte是一个值类型,它代表8位无符号整数,取值范围是0到255。在处理图像数据时,通常会将图像的每个像素表示为一个或多个byte...
二、H.264流分析 H.264是目前最广泛应用的视频编码标准之一,其高效压缩技术使得高质量视频能在有限带宽下传输。Elecard Stream Eye能细致地解析H.264编码的视频流,包括码率、帧率、分辨率、色度格式等关键参数,...
(/opt/nvidia/deepstream/deepstream/samples/) 中的一些文件。 该项目包括 ROS2 发布者节点,这些节点将单个/多个视频流作为来自网络摄像头或文件的输入: single_stream节点:这对单个视频输入执行 2 个推理任务:...
第二个队伍只要姓张的,我们使用filter方法对队伍进行过滤,然后使用skip方法跳过前两个元素。最后,我们使用concat方法将两个队伍合并成一个队伍,并将结果存储到一个ArrayList集合中。 在实现中,我们首先将两个...
#### 二、Stream的基本使用 ##### 1. 创建Stream 创建Stream有多种方式: - **空流**:可以通过调用`Stream.empty()`来创建一个空的Stream。 ```java Stream<String> emptyStream = Stream.empty(); ``` - ...
#### 二、管道配置 StreamSets 提供了丰富的配置选项,使用户可以根据实际需求定制数据流的行为。 **2.1 管道设计器 UI** 管道设计器提供了一个直观的用户界面,用户可以通过拖拽组件来构建数据流。 **2.2 管道...
Adodb.Stream 是 ADO 的 Stream 对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作。它提供了多种方法来实现流的操作,包括 Cancel、Close、CopyTo、Flush、LoadFromFile、Open、Read、...
二、功能摘要 Video In to AXI4-Stream v4.0 提供了以下主要功能: * 视频数据处理:支持多种视频格式和分辨率的数据处理。 * AXI4-Stream 接口:提供了高速、低延迟的数据传输接口。 * 可配置性:支持用户自定义的...
二、Stream子类 C#中有很多Stream的子类,每个子类都针对特定的数据源或目标进行了优化: 1. 文件流:FileStream用于读写文件,如FileInputStream和FileOutputStream。 2. 网络流:NetworkStream用于处理TCP/IP套接...
首先,Stream流对象是ADO的一个重要组成部分,它提供了读写二进制或文本数据的能力。这使得Stream非常适合处理像图片这样的二进制文件。在存储图片之前,我们需要先创建一个Stream对象,并将图片文件的内容加载到这...
Elecard StreamEye Studio是一款功能强大专业的多媒体视频优化压缩编码工具,它可以该显示多媒体文件帧,它们的大小,类型,时间,位置和顺序流;比特率,以及其他常见的视频流参数。 2. Elecard XMuxer Pro是一个...
`ADODB.Stream`是Microsoft ActiveX Data Objects (ADO)中的一个核心组件,它提供了一种处理数据流的方式,无论数据是文本、二进制还是其他形式。在编程中,特别是VBScript、VBA或者Classic ASP中,`ADODB.Stream`...
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以...
#### 二、Stream类的构造与基本属性 - `Stream` 类是.NET Framework中的一个抽象类,用于表示数据流。它提供了基本的读写方法,并且可以被继承以实现更具体的流类型。 - 构造函数: `Stream` 类本身只有一个受保护的...
`concat-stream`是一个非常实用的Node.js模块,它提供了将多个流连接起来并转换为单一的字符串或二进制数据的功能。 `concat-stream`库的使用主要围绕两个核心概念:流和数据的合并。在Node.js中,流是一种处理I/O...
二、H.264文件分析 H.264,又称为AVC(Advanced Video Coding),是一种高效的视频编码标准,广泛应用在高清视频、网络流媒体等领域。StreamEye Tools提供强大的H.264分析功能,可以逐帧分析编码参数,如QP值、宏块...
#### 二、Stream 命令详解 ##### 1. XADD - 添加新条目到 Stream **命令格式**: ``` XADD key [NOMKSTREAM] [MAXLEN | MINID [=|~] threshold [LIMIT count]] * | ID field value [field value] ``` - **作用**:...
// 第二个可读流 const combinedStream = streamConcat([stream1, stream2]); combinedStream.on('data', (chunk) => { // 处理合并后的数据 }); combinedStream.on('end', () => { // 所有数据已读取完毕 });...
#### 二、数据库归档配置 ##### 1. 查看数据库归档状态 - **命令**: `select log_mode from v$database;` - **解释**: 此命令用于检查当前数据库是否处于归档模式。如果返回结果为`NOARCHIVELOG`,则表示未开启...