java 数据流 中文_Java8 数据流

一、基本知识

**数据流(stream)**是对集合(collection)功能的增强,更专注于对集合对象的各种便利、高效的聚合,大批量数据操作。

数据流的特点:

元素序列 - 流提供了一组特定类型的以顺序方式元素。

源 - 流使用集合,数组或I/O资源为输入源。

聚合操作 - 数据流支持如filter, map, limit, reduced, find, match等聚合操作。

管道传输 - 大多数流操作的返回流本身使他们的结果可以被管道传输。

自动迭代 - 流操作内部做了反复对比,其中明确迭代需要集合提供源元素。

Collection接口有两个方法来生成流:

stream() -返回顺序流考虑集合作为其源。

parallelStream() - 返回并行数据流考虑集合作为其源。

二、使用示例

测试类:

/**

* 数据流测试

*

* @author Kevin

* @date 2017-01-28

*/

public class StreamTest {

public static void main(String args[]) {

List strings = Arrays.asList("Alphabet", "", "Tesla Motors", "SpaceX", "", "Blue origin");

System.out.println("List: " + strings);

// filter方法用于消除基于标准元素

long count = strings.stream().filter(string -> string.isEmpty()).count();

System.out.println("Empty Strings count: " + count);

count = strings.stream().filter(string -> string.length() == 6).count();

System.out.println("Strings of length 6 count: " + count);

// 收集器是用来处理组合在一个数据流的元素的结果

List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

System.out.println("Filtered List: " + filtered);

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));

System.out.println("Merged String: " + mergedString);

List numbers = Arrays.asList(4, 4, 2, 8, 8, 5);

System.out.println("numbers List: " + numbers);

// map方法用于映射每个元素对应的结果

List squaresList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());

System.out.println("Squares List: " + squaresList);

// 计算统计数据

List integers = Arrays.asList(1, 12, 21, 16, 24, 34);

System.out.println("List: " + integers);

IntSummaryStatistics stats = integers.stream().mapToInt((x) -> x).summaryStatistics();

System.out.println("Highest number in List : " + stats.getMax());

System.out.println("Lowest number in List : " + stats.getMin());

System.out.println("Sum of all numbers : " + stats.getSum());

System.out.println("Average of all numbers : " + stats.getAverage());

Random random = new Random();

System.out.println("Random Numbers: ");

// limit 方法用于减少流的大小

// sorted方法用于流排序

// 数据流提供了新的forEach方法遍历该流中的每个元素

random.ints().limit(10).sorted().forEach(System.out::println);

// parallelStream是流进行并行处理的替代方案

count = strings.parallelStream().filter(string -> string.isEmpty()).count();

System.out.println("Empty Strings: " + count);

}

}

运行结果:

List: [Alphabet, , Tesla Motors, SpaceX, , Blue Origin]

Empty Strings count: 2

Strings of length 6 count: 1

Filtered List: [Alphabet, Tesla Motors, SpaceX, Blue Origin]

Merged String: Alphabet, Tesla Motors, SpaceX, Blue Origin

numbers List: [4, 4, 2, 8, 8, 5]

Squares List: [16, 4, 64, 25]

List: [1, 12, 21, 16, 24, 34]

Highest number in List : 34

Lowest number in List : 1

Sum of all numbers : 108

Average of all numbers : 18.0

Random Numbers:

-2106309174

-1591609963

-1105970115

-455066830

242292433

929670242

1008846372

1047231272

1812276130

1941752343

Empty Strings: 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值