stream

将要处理的集合,数组,I/O channel, 产生器generator 等看作一种流

流中间操作都会返回流对象本身,内部迭代

生成流

在 Java 8 中, 集合接口有两个方法来生成流:

  • stream() − 为集合创建串行流(普通的一个个执行)
  • parallelStream() − 为集合创建并行流(多个线程并行操作元素,元素执行顺序可能会随机)

forEach

forEach() 来迭代流中的每个数据

XXX.stream().forEach(System.out::println);

map

映射每个元素到对应的结果

numbers.stream().map( i -> i*i);

filter

设置的条件过滤出元素

strings.stream().filter(string -> string.isEmpty()).forEach(System.out::println);

limit

获取指定数量的流

XXX.stream().limit(10).forEach(System.out::println);

sorted

排序

collect

public interface Stream<T> extends BaseStream<T, Stream<T>> {
    <R, A> R collect(Collector<? super T, A, R> collector);
}

Collector

Collector是专门用来作为Stream的collect方法的参数

Collector是一个接口

Collectors

是JDK预实现Collector接口的工具类

toCollection

将流中的元素全部放置到一个新集合中返回

toList

将流中的元素放置到一个列表集合中去。这个列表默认为ArrayList。

toSet

将流中的元素放置到一个无序集set中去。默认为HashSet。

joining

joining的目的是将流中的元素全部以字符序列的方式连接到一起,可以指定连接符,甚至是结果的前后缀。

public class CollectorsTest {
    public static void joiningTest(List<String> list){
        // 无参方法
        String s = list.stream().collect(Collectors.joining());
        System.out.println(s);
        // 指定连接符
        String ss = list.stream().collect(Collectors.joining("-"));
        System.out.println(ss);
        // 指定连接符和前后缀
        String sss = list.stream().collect(Collectors.joining("-","S","E"));
        System.out.println(sss);
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        joiningTest(list);
    }
}
1234567891101212121121asdaa3e3e3e2321eew
123-456-789-1101-212121121-asdaa-3e3e3e-2321eew
S123-456-789-1101-212121121-asdaa-3e3e3e-2321eewE
mapping

首先对流中的每个元素进行映射,即map()操作,然后再将新元素以给定的Collector进行归纳。

List<Integer> ll = list.stream().limit(5).collect(Collectors.mapping(Integer::valueOf,Collectors.toList()));
等等

统计

主要用于int、double、long等基本类型上

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
 
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
 
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值