JDK1.8中的Lambda公式--04【流的测试】

流只能使用一次

流Stream的测试
遗憾的是, 流有一个方法让你能查看每个值, 同时能继续操作流。 这就是 peek 方法。 例7-18 使用 peek 方法重写了前面的例子, 输出流中的值, 同时避免了重复的流操作。
例 7-18 使用 peek 方法记录中间值
Set<String> nationalities= album.getMusicians()
.filter(artist -> artist.getName().startsWith("The"))
.map(artist -> artist.getNationality())
.peek(nation -> System.out.println("Found nationality: " + nation))
.collect(Collectors.<String>toSet());
使用 peek 方法还能以同样的方式, 将输出定向到现有的日志系统中, 比如 log4j、 java.util.logging 或者 slf4j。


例子:

package com.mmmm.test;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;


import com.mmmm.model.Album;
import com.mmmm.model.Artist;
import com.mmmm.model.Track;


public class Test_0506_04 {


	public static void main(String[] args) {


		List<Artist> musicians=new ArrayList<Artist>();
		musicians.add(new Artist("The JiaKeChong",Arrays.asList("zhangsan","lisi","wangwu") , "Americ"));
		musicians.add(new Artist("The TFBOYS",Arrays.asList("wangyuan","wang","yiyangqianxi") , "China"));
		musicians.add(new Artist("The xiha",Arrays.asList("lili") , "Italy"));
		musicians.add(new Artist("The yangmi",Arrays.asList("lilian") , "Italy"));


		List<Track> trackList_1 = new ArrayList<>();
		trackList_1.add(new Track("song_01"));


		Album  album=new Album("xingxing", trackList_1, musicians);
		Set<String> nationalities=
				musicians.stream()
				.filter(artist -> artist.getName().startsWith("The"))
				.map(artist -> artist.getOrigin())
				.peek(nation -> System.out.println("Found nationality: " + nation))
				.collect(Collectors.<String>toSet());
		System.out.println(nationalities);
	}


}


要点回顾
(1) 重构遗留代码时考虑如何使用 Lambda 表达式, 有一些通用的模式。
(2)如果想要对复杂一点的 Lambda 表达式编写单元测试, 将其抽取成一个常规的方法。
(3) peek 方法能记录中间值, 在调试时非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值