Сортировать по заданной последовательности индексов, используя поток - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь подумать, возможна ли такая сортировка по индексу, используя 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

1 Ответ

0 голосов
/ 23 января 2019

Один из простых способов сделать это - выполнить итерацию по Array, а затем сопоставить каждое целое с соответствующим индексом 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());
}
...