这是《java8函数式编程》第三章中的内容,学习了对流的几个操作后,对它们的组合使用进行练习。
1、目的:给定了构建模型,对传入参数专辑列表ArrayList<Album>进行过滤,找出时间长度>60的歌曲名称。
2、实现code:
package java8;
import java.util.ArrayList;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @Author: cxh
* @CreateTime: 17/12/14 20:47
* @ProjectName: JavaBaseTest
* <测试类></>
*/
public class Test {
public static void main(String[] args) {
ArrayList<Album> albums=new ArrayList<>();
int len=30;
for(int i=0;i<5;i++){
//name
String name="LiLy"+i;
//tracks
ArrayList<Track> tracks=new ArrayList<>();
tracks.add(new Track("John"+i,len+=10));
//artists
ArrayList<Artist> artists=new ArrayList<>();
ArrayList<String> mems=new ArrayList<>();
mems.add("lili"+i);mems.add("zhouxin"+i);mems.add("jimi"+i);
Artist artist=new Artist("qiduobaihe"+i,mems,"china"+i);
artists.add(artist);
albums.add(new Album(name,tracks,artists));
}
//找出长度大于1的曲目
Set<String> res=albums.stream().flatMap(album -> album.getTracks().stream())
.filter(track -> track.getLength()>60)
.map(track -> track.getName())
.collect(Collectors.toSet());
for(String str:res)
System.out.println(str);
}
}
输出:
John3
John4
Process finished with exit code 0