Java8 的新功能流:streams

1 篇文章 0 订阅

Stream API

java.util.stream:其中包含用于处理元素序列的类
Stream

Stream Creation

stream() or of()

String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
stream = Stream.of("a", "b", "c");

Collection 接口中包含 stream() 方法,可用于创建 Stream

Stream<String> stream = list.stream();
Multi-threading with Streams

parallelStream() 方法,可以在并行情况下使用

list.parallelStream().forEach(element -> doWork(element));

Stream Operations

中间操作:返回 Stream,可以链接
终端操作:返回特定类型的结果

对流的操作不会改变源

long count = list.stream().distinct().count();
Iterating 迭代
for (String string : list) {
    if (string.contains("a")) {
        return true;
    }
}
//等价于
boolean isExist = list.stream().anyMatch(element -> element.contains("a"));
Filtering 过滤

选择满足条件的元素流

ArrayList<String> list = new ArrayList<>();
list.add("One");
list.add("OneAndOnly");
list.add("Derek");
list.add("Change");
list.add("factory");
list.add("justBefore");
list.add("Italy");
list.add("Italy");
list.add("Thursday");
list.add("");
list.add("");

//所有包含“d”的元素流
Stream<String> stream = list.stream().filter(element -> element.contains("d"));
Mapping

对每一个元素进行操作,并生成一个新的stream

List<String> uris = new ArrayList<>();
uris.add("C:\\My.txt");
Stream<Path> stream = uris.stream().map(uri -> Paths.get(uri));

flatMap() 创建内部元素的流

List<Detail> details = new ArrayList<>();
details.add(new Detail());
Stream<String> stream = details.stream().flatMap(detail -> detail.getParts().stream());
Matching
boolean isValid = list.stream().anyMatch(element -> element.contains("h")); // true
boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); // false
boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); // false
Reduction

根据指定的函数将元素序列减少到某个值,方法含有两个参数,第一个是起始值,第二个是累加器函数。

List<Integer> integers = Arrays.asList(1, 1, 1);
Integer reduced = integers.stream().reduce(23, (a, b) -> a + b);
Collecting

将流转化为 Collection 或 Map

List<String> resultList = list.stream().map(element -> element.toUpperCase()).collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值