JDK1.8新特性总结 - 篇二(Stream API)

篇一中谈到了Lambda的基本语法,核心函数式接口以及方法引用的概念,现在让我们把关注点放到Stream Api上

一. Stream API

           流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。集合关注的是数据,而流关注的是计算!

           注意:

           1. Stream不会自己存储元素。

           2. Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。

           3. Stream操作是延迟的。

          Stream的操作大致分成以下三步:

       1. 创建Stream

              一个数据源(如:集合、数组), 获取一个流

/**
 * 创建Stream
 */
@org.junit.Test
public void test1(){
	//1. 通过Collection系列集合提供的stream()或parallelStream()将集合转换成集合流
	List<String> list = new ArrayList<>();
	Stream<String> stream1 = list.stream();

	//2. 通过Arrays的静态方法stream()将数组转换成数组流
	Employee[] employee = new Employee[10];
	Stream<Employee> stream2 = Arrays.stream(employee);

	//3. 通过Stream中的静态方法of()
	Stream<String> stream3 = Stream.of("a", "b", "c");

	//4. 创建无限流
	//4.1 迭代
	Stream<Integer> stream4 = Stream.iterate(0, x->x+2); //给出一个seed==0,根据一元表达式进行迭代产生无限流
	//stream4.forEach(System.out::println);

	//4.2 生成
	Stream<Double> stream5 = Stream.generate(Math::random);
	stream5.forEach(System.out::println);
}

        2. 中间操作

              中间操作链。多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则在执行中间操作时不会执行任何的处理。而在终止操作时一次性全部处理结果的做法被称为"惰性求值"。

             筛选与切片:

             1. filter(Predicate predicate)       

                 接收Lambda,从流中排除某些元素。

             2. distinct()

                 筛选,通过流所生成元素的hashCode()和equals()去除重复元素。

             3. limit(long maxSize)

                 截断流,使其元素不超过给定的数量。

             4. skip(long n)

                跳过元素,返回一个扔掉了前n个元素的流。若流中的元素不足n个,则返回一个空流。与limit(long n)互补。

List<Employee> employees = Arrays.asList(
		new Employee("Jack1", 18, 8888),
		new Employee("Jack2", 20, 6666),
		new Employee("Jack3", 19, 9999),
		new Employee("Jack4", 25, 3333),
		new Employee("Jack4", 25
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值