使用Stream按给定的索引序列排序

时间:2019-01-23 02:04:12

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

我正在尝试使用是否可以按索引进行排序。 我所有的搜索都始终通过将对象值与其他对象值进行比较来进行排序。 下面是示例数据和预期结果:

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

1 个答案:

答案 0 :(得分:2)

一种简单的方法是在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());
}