簡體   English   中英

如何將歌曲列表轉換為字符串流?

[英]How to convert a list of Songs into stream of Strings?

我有一個歌曲列表,它是一個具有 3 個值的類: songNamealbumNamedurationhash 我編寫了一個函數,它返回按名稱排序的所有歌曲的Stream<String> 我的第一個想法是這樣的:

public Stream<String> orderedSongNames() {
     return songs.stream().sorted((s1,s2)>s1.getSongName().compareTo(s2.getSongName()));
}

問題是,通過這種方式,返回值是一個Stream<Song>但我想要一個Stream<String> 有沒有人知道我如何解決手頭的問題?

考慮到您已經覆蓋了toString方法; 您可以像這樣返回每個對象的字符串表示的流:

return songs.stream()
            .sorted((s1, s2) -> s1.getSongName().compareTo(s2.getSongName()))
            .map(Object::toString); 

或者,如果您想返回一個Stream<String> ,其中字符串是歌曲名稱。

return songs.stream()
            .sorted((s1, s2) -> s1.getSongName().compareTo(s2.getSongName()))
            .map(Song::getSongName); 

如果您想獲得按長度排序的歌曲名稱的Stream<String> ,則首先通過獲取它們的名稱將Song實例映射String

public Stream<String> orderedSongNames() {
    return songs.stream()
        .map(Song::getSongName)
        .sorted(String::compareTo);
}

您可以先排序,然后按照其他一些答案的建議進行映射,結果和過程幾乎相同,但寫起來更冗長,這就是我重新排序這些操作的原因:

public Stream<String> orderedSongNames() {
    return songs.stream()
        .sorted(Comparator.comparing(Song::getSongName))
        .map(Song::getSongName);
}

你只需要映射它:

public Stream<String> orderedSongNames() {
  return songs.stream()    
    .sorted((s1,s2)>s1.getSongName().compareTo(s2.getSongName()))
    .map((s) -> s.getSongName());
}

您在>之前缺少破折號:

return songs.stream().sorted((s1,s2)->s1.getSongName().compareTo(s2.getSongName()));
                                    ^--- here

但是,只需這樣做:

return songs.stream().sorted(Comparator.comparing(Song::getSongName));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM