java stream实现 list<实体>根据另一个list排序
时间: 2023-12-06 15:02:19 浏览: 404
假设我们有一个实体类 `Entity`,其中有一个属性 `key`,我们需要根据另一个 `List` 中的元素顺序对一个 `List<Entity>` 进行排序,可以使用 Java 8 的 Stream API 来实现。
假设需要排序的 `List<Entity>` 为 `entityList`,另一个顺序 `List<String>` 为 `orderList`,可以按照以下步骤进行排序:
1. 使用 `Stream` 对 `entityList` 进行排序,排序的依据是 `orderList` 中每个元素在 `Entity.key` 中出现的位置。代码如下:
```
List<Entity> sortedList = entityList.stream()
.sorted(Comparator.comparingInt(entity -> orderList.indexOf(entity.getKey())))
.collect(Collectors.toList());
```
2. 首先对 `entityList` 进行 `stream()` 操作得到一个 `Stream<Entity>`,然后使用 `sorted()` 方法对 `Stream` 进行排序。
3. 在 `sorted()` 方法中,使用 `Comparator.comparingInt()` 方法来指定排序依据,其中 `entity -> orderList.indexOf(entity.getKey())` 表示将 `Entity` 对象转换为 `Entity.key` 在 `orderList` 中的位置。因为 `orderList.indexOf()` 方法返回的是 `int` 类型,所以使用了 `comparingInt()` 方法。
4. 最后使用 `collect()` 方法将排序后的 `Stream` 转换为一个 `List<Entity>` 并赋值给 `sortedList`。
这样就可以根据另一个 `List` 的顺序对 `List<Entity>` 进行排序了。
阅读全文