我偶爾學習Java。作為一個python背景的人,我想知道sorted(iterable, key=function)java中是否存在類似python的東西。例如,在 python 中,我可以對按元素的特定字符排序的列表進行排序,例如>>> a_list = ['bob', 'kate', 'jaguar', 'mazda', 'honda', 'civic', 'grasshopper']>>> s=sorted(a_list) # sort all elements in ascending order first>>> s['bob', 'civic', 'grasshopper', 'honda', 'jaguar', 'kate', 'mazda'] >>> sorted(s, key=lambda x: x[1]) # sort by the second character of each element['jaguar', 'kate', 'mazda', 'civic', 'bob', 'honda', 'grasshopper'] Soa_list首先按升序排序,然后按每個元素的 1 個索引(第二個)字符排序。我的問題是,如果我想在 Java 中按特定字符按升序對元素進行排序,我該如何實現(xiàn)?下面是我寫的 Java 代碼:import java.util.Arrays;public class sort_list { public static void main(String[] args) { String [] a_list = {"bob", "kate", "jaguar", "mazda", "honda", "civic", "grasshopper"}; Arrays.sort(a_list); System.out.println(Arrays.toString(a_list));} }}結果是這樣的:[bob, civic, grasshopper, honda, jaguar, kate, mazda] 這里我只實現(xiàn)了數(shù)組升序排序。我希望 java 數(shù)組與 python 列表結果相同。Java 對我來說是新手,所以任何建議都將不勝感激。
3 回答

繁星coding
TA貢獻1797條經(jīng)驗 獲得超4個贊
使用自定義比較器比較兩個字符串。
Arrays.sort(a_list, Comparator.comparing(s -> s.charAt(1)));
這通過字符串的第二個字符比較兩個字符串。
這將導致
[kate, jaguar, mazda, civic, bob, honda, grasshopper]
我看到了jaguar
,并且kate
在你的輸出中切換了。我不確定 Python 如何排序兩個相等的字符串。穩(wěn)定排序。Arrays.sort
_
這種排序保證是穩(wěn)定的:相等的元素不會因為排序而重新排序。

汪汪一只貓
TA貢獻1898條經(jīng)驗 獲得超8個贊
您可以使用Comparator.comparing
對列表進行排序
Arrays.sort(a_list, Comparator.comparing(e -> e.charAt(1)));
如果您想使用 Java Stream API 在新列表中進行排序和收集
String [] listSorted = Arrays.stream(a_list) .sorted(Comparator.comparing(s -> s.charAt(1))) .toArray(String[]::new);

紅顏莎娜
TA貢獻1842條經(jīng)驗 獲得超13個贊
您可以向 提供一個 lambda 函數(shù)Arrays.sort
。對于您的示例,您可以使用:
Arrays.sort(a_list,?(String?a,?String?b)?->?a.charAt(1)?-?b.charAt(1));
假設您首先按字母順序(使用 )對數(shù)組進行了排序,Arrays.sort(a_list)
這將為您提供所需的結果:
['jaguar',?'kate',?'mazda',?'civic',?'bob',?'honda',?'grasshopper']
添加回答
舉報
0/150
提交
取消