如何将歌曲列表转换为字符串流?

时间:2017-11-21 19:37:30

标签: java list java-stream

我有一个歌曲列表,这是一个包含3个值的类:songNamealbumNamedurationhash。 我编写了一个函数,它返回按名称排序的所有歌曲的Stream<String>。 我的第一个想法是:

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

问题在于,通过这种方式,返回值为Stream<Song>,但我想要Stream<String>。有没有人知道如何解决手头的问题?

4 个答案:

答案 0 :(得分:0)

考虑到您已覆盖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); 

答案 1 :(得分:0)

如果您希望按长度排序Stream<String>个歌曲名称, 然后通过获取他们的名字,首先将<{1}}个实例 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);
}

答案 2 :(得分:0)

你只需要映射它:

matrix @ list

答案 3 :(得分:0)

您错过了>之前的短划线:

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

但是,只需这样做:

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