排序如何通过另一个ID列表对java中的列表进行排序
我有一个java中的对象列表,如下所示:
List<Video> videos = new ArrayList<Video>();
我的视频对象如下所示:
public class Video {
private String nameId;
private Integer id;
...
}
我有另一个列表,其中只包含我的nameId字符串:
List<String> nameIdList = ArrayList<String>();
我如何编写一个compareto方法,它不通过比较每个视频对我的视频列表进行排序,而是使用另一个列表?到目前为止,我的方法是使用一个简单的冒泡排序,但随着我的列表越来越大,这将是非常低效的
例如:
我可以有名称ID为“apple”、“bannana”、“orange”的视频对象
我的字符串列表可以是:“bannana”、“apple”、“orange”
因此,我想返回给我的客户的视频顺序应该是:“bannana”、“apple”、“orange”
# 1 楼答案
Java 8:
这比this小
# 2 楼答案
一个简单而干净的解决方案,令人惊讶的是没有提到:
Ordering.explicit是番石榴的一部分
# 3 楼答案
除非所涉及的列表非常长,否则我将使用this解决方案,但这里有一个具有时间复杂性
O(n)
的替代解决方案。任何使用Comparator
和Collections.sort
或Arrays.sort
的解决方案的时间复杂度都不比O(n log n)
好该方法基于另一个列表对列表
videos
进行排序,并清除其nameId
不在列表中的任何Video
# 4 楼答案
您可以使用自定义比较器
为了提高效率,您可以使用
Map<String, Integer>
,以便更有效地查找所需的顺序# 5 楼答案
爪哇8。转换为映射并按哈希拾取:
# 6 楼答案
您可以使用Java8流