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

回到顶部