【问题标题】:Sort by given index sequence using Stream使用 Stream 按给定的索引序列排序
【发布时间】:2019-01-23 02:04:12
【问题描述】:

我尝试考虑是否可以使用 streams 按索引进行排序。 我所有的搜索总是指向通过将对象值与其他对象值进行比较来进行排序。 以下是示例数据和预期结果:

List<Movie> movies = new ArrayList<>();
movies.add(new Movie(1, "Movie1"));
movies.add(new Movie(2, "Movie2"));
movies.add(new Movie(3, "Movie3"));
movies.add(new Movie(4, "Movie4"));

int[] sortIndex = [0, 3, 1, 2];
...Sorting Code...
for (Movie movie : movies) {
    Log.d(TAG, movie.getName());
}

预期的答案应该是

Movie1
Movie4
Movie2
Movie3

【问题讨论】:

    标签: java android sorting java-8 java-stream


    【解决方案1】:

    一种简单的方法是遍历Array,然后将每个int映射到List的相应索引,然后将其收集到List

    List<Movie> newList = Arrays.stream(sortIndex)
                                .mapToObj(e -> movies.get(e))
                                .collect(Collectors.toList());
    

    这将产生List:

    [Movie1, Movie4, Movie2, Movie3]
    

    您可以创建一个方法来执行此操作:

    public <T> List<T> sortList(int[] sortOrder, List<T> list) {
        return Arrays.stream(sortOrder)
                     .mapToObj(e -> list.get(e))
                     .collect(Collectors.toList());
    }
    

    【讨论】:

    • 会试试这个。
    猜你喜欢
    • 2011-03-16
    • 2021-11-17
    • 2023-03-30
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2014-08-20
    相关资源
    最近更新 更多