如何通过另一个id列表对Java中的列表进行排序

2022-09-05 00:22:58

我有一个java中的对象列表,看起来像这样:

List<Video> videos = new ArrayList<Video>();

我的视频对象看起来像这样:

public class Video {
    private String nameId;
    private Integer id;
    ...
}

我有另一个列表,只有我的nameId字符串:

List<String> nameIdList = ArrayList<String>();

如何编写一个比较方法,该方法不通过比较每个视频来对视频列表进行排序,而是使用另一个列表?到目前为止,我的方法一直是使用简单的气泡排序,但随着我的列表越来越大,这将非常低效。

例:

我可以有带有nameIds的视频对象:“苹果”,“bannana”,“橙色”

我的字符串列表可以按它们排序:“bannana”,“apple”,“orange”

所以我的视频我想回到我的客户应该是按以下顺序:“bannana”,“apple”,“orange”


答案 1

Java 8:

videos.sort(Comparator.comparing(v->nameIdList.indexOf(v.getNameId())));

这比这个


答案 2

一个简单而干净的解决方案,令人惊讶的是,它没有提到:

videos.sort(Ordering.explicit(nameIdList).onResultOf(Video::getNameId));

Ordering.explicit是番石榴的一部分。


推荐