java list如何指定元素排在最前面?
public static void main(String[] args) throws InterruptedException { String fund = "450,460,470,480";
ArrayList<String> list = new ArrayList<>();
list.add("480");
list.add("485");
list.add("450");
list.add("481");
list.add("460");
list.add("366");
list.add("470");
list.add("277");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 1;
}
});
for (String s : list) {
System.out.println(s);
}
}
要让这个list排完序后,如果里面的内容存在于fund中,则排在最前面,就是450,460,470,480这几个元素要在最前,这个该怎么写
回答:
一种办法,是把范围内和范围外的数据单独排序,完了再合并。
另一种办法,做两次比较。先判断两个数据是否都在范围内,如果一个在一个不在,先后顺序马上就能确定出来;然后再对都在范围内或者都在范围外的情况下,进行普通的比较。
实际操作的时候可以先标准两个对象,用位的思路。用 1 标记 o1
在范围内,用 2 标记 o2
在范围内。两个标记值相加得到总标记 m
。那么,他们都在范围内或都在范围外的时候,m == 0 || m == 3
。另外,在 m == 1
或者 m == 2
的时候,根据 m
的值就知道哪个该在前了。
public int compare(String o1, String o2) { int m = fund.contains(o1) ? 1 : 0;
m += (fund.contains(o2) ? 2 : 0);
return m == 0 || m == 3
? o1.compareTo(o2)
: m == 1 ? -1 : 1;
}
2022-03-10 补充
看了 @大马扎 的回答,补充一下代码。因为都是表示数字的定长字符串比较,所以如果要让它们变大,只需要前缀一个字母就可以了
list.sort((o1, o2) -> { o1 = fund.contains(o1) ? o1 : "X" + o1;
o2 = fund.contains(o2) ? o2 : "X" + o2;
return o1.compareTo(o2);
});
这个方法代码比较简洁,就是会产生辅助用的 String 对象。
回答:
用两个List,将存在的元素放在list1)中,将不存在的放在list2中,然后分别排序,最后list1.addAll(list2)
回答:
思路:list排完序后,如果里面的内容存在于fund中,将这个值进行放大,按照同样的规则。
放大之后要大于你的list里的最大值。
回答:
450,460,470,480这几个要排序吗
以上是 java list如何指定元素排在最前面? 的全部内容, 来源链接: utcz.com/p/944278.html