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

Dan*_*elD 5 java sorting

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

List<Video> videos = new ArrayList<Video>();
Run Code Online (Sandbox Code Playgroud)

我的视频对象如下所示:

public class Video {
    private String nameId;
    private Integer id;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

List<String> nameIdList = ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

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

例:

我可以使用nameIds的视频对象:"apple","bannana","orange"

我的字符串列表可以是:"bannana","apple","orange"

所以我想要回到我的客户的视频应该是:"bannana","apple","orange"

Tok*_*eja 11

Java 8:

videos.sort(Comparator.comparing(v->nameIdList.indexOf(v.getNameId())));
Run Code Online (Sandbox Code Playgroud)

这比


amu*_*rka 5

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

videos.sort(Ordering.explicit(nameIdList).onResultOf(Video::getNameId));
Run Code Online (Sandbox Code Playgroud)

Ordering.explicit是 Guava 的一部分。


Pet*_*rey 2

您可以使用自定义比较器

List<String> nameIdList = new ArrayList<>();
Comparator<Video> compare = new Comparator<Video>() {
     public int compare(Video v1, Video v2) {
         return nameIdList.indexOf(v1.getNameId()) - nameIdList.indexOf(v2.getNameId());
     }
};
Run Code Online (Sandbox Code Playgroud)

为了提高效率,您可以拥有一个Map<String, Integer>,以便您可以更有效地查找所需的订单。