public class Test {
public static void main(String[] args) {
/**
* 找出長度大於一分鐘的曲目
* @param albums
* @return
*/
public static Set<String> findLongTracks(List<Album> albums){
Set<String> trackNames = new HashSet<>();
for (Album album : albums){
for (Track track : album.getTrackList()){
if (track.getLength() > 60){
String name = track.getName();
trackNames.add(name);
}
}
}
return trackNames;
}
public static Set<String> findLongTracks2(List<Album> albums){
Set<String> trackNames = new HashSet<>();
albums.stream()
.forEach(album -> {
album.getTrackList().stream()
.forEach(track -> {
if (track.getLength() > 60){
String name = track.getName();
trackNames.add(name);
}
});
});
return trackNames;
}
public static Set<String> findLongTracks3(List<Album> albums){
Set<String> trackNames = new HashSet<>();
albums.stream()
.forEach(album -> {
album.getTrackList().stream()
.filter(track -> track.getLength() > 60)
.map(track -> track.getName())
.forEach(name -> trackNames.add(name));
});
return trackNames;
}
public static Set<String> findLongTracks4(List<Album> albums){
Set<String> trackNames = new HashSet<>();
albums.stream()
.flatMap(album -> album.getTrackList().stream())
.filter(track -> track.getLength() > 60)
.map(track -> track.getName())
.forEach(name ->trackNames.add(name));
return trackNames;
}
public static Set<String> findLongTracks5(List<Album> albums){
return albums.stream()
.flatMap(album -> album.getTrackList().stream())
.filter(track -> track.getLength() > 60)
.map(track -> track.getName())
.collect(Collectors.toSet());
}
}
@Data
class Album{
private String name;
private List<Track> trackList;
}
@Data
class Track{
private Long length;
private String name;
}
如何用lambda表達式優雅的寫出雙層for循環
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.