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
解决方案
一种简单的方法是遍历Array
,然后将每个 int 映射到 的相应索引List
,然后将其收集到 a 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());
}
推荐阅读
- node.js - 猫鼬模式引用返回未定义
- python - Python - 二维数组的函数返回
- search - Prolog中的游戏树模对称性
- discord.js - 有没有办法将它编译成更小的代码段?
- javascript - 为使用 Hls.js 管理的 HLS 视频构建音量计
- excel - 如何在不删除原始表格中的公式的情况下将带有公式的表格中的数据复制到另一张表格中?
- python - Django objects.get():精确查找的 QuerySet 值必须限制为使用切片的一个结果
- java - 如何使用 springdoc-openapi-maven-plugin 和 swagger-codegen-maven-plugin 生成客户端代码?
- c# - 为什么在异步数据库层操作中使用 ConfigureAwait(false)?
- android - Google Play 游戏服务应用程序登录卡在白屏上