可以排序int[ ][ ]的順序,也可以排序List<List<Integer>> 順序
為便于理解,以力扣原題為例:1333.餐廳過(guò)濾器
原題中給了一個(gè)雙重?cái)?shù)組,并要求返回一個(gè)List<Integer>。
方法1:
會(huì)用流的,通常用于會(huì)反應(yīng)把雙重?cái)?shù)組轉(zhuǎn)成List<List<Integer>>去處理這個(gè)雙重?cái)?shù)組,于是解題思路如下:
public static List<Integer> filterRestaurants2(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
//構(gòu)造嵌套List
List<List<Integer>> lists = new ArrayList<>();
for(int[] arr : restaurants){
if((veganFriendly == 1 && arr[2] != 1) || maxPrice < arr[3] || maxDistance < arr[4]){
continue;
}
lists.add(Arrays.stream(arr).boxed().collect(Collectors.toList()));
}
if (lists.size() == 0) {
return new ArrayList<>();
}
//嵌套List排序
lists.sort((a,b) ->{
int rating = b.get(1).compareTo(a.get(1));
if (rating != 0) {
return rating;
}
return b.get(0).compareTo(a.get(0));
});
return lists.stream().map(o->o.get(0)).collect(Collectors.toList());
}
可是該方式耗空間較大,于是又會(huì)想,能不能從直接用數(shù)組的方式,不另外構(gòu)造新對(duì)象。
方法2:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-726752.html
public static List<Integer> filterRestaurants3(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
for(int[] arr : restaurants){
if((veganFriendly == 1 && arr[2] != 1) || maxPrice < arr[3] || maxDistance < arr[4]){
arr[0] = 0;
}
}
//雙重?cái)?shù)組排序
Arrays.sort(restaurants, (o1, o2) -> {
int compare = Integer.compare(o2[1], o1[1]);
if (compare != 0){
return compare;
}
return Integer.compare(o2[0], o1[0]);
});
return Arrays.stream(restaurants).map((int[] o)->o[0]).filter(o->o!=0).collect(Collectors.toList());
}
但是提交的結(jié)果然后是耗時(shí)耗空間。
既然數(shù)組能用流處理,那是不是可以全部用流的形式過(guò)濾和排序呢
方法3:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-726752.html
public static List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
return Arrays.stream(restaurants)
.filter(r -> (veganFriendly != 1 || r[2] == 1) && r[3] <= maxPrice && r[4] <= maxDistance)
//雙重?cái)?shù)組排序
.sorted((a1, a2) -> a1[1] == a2[1] ? a2[0] - a1[0] : a2[1] - a1[1])
.map(a -> a[0])
.collect(Collectors.toList());
}
到了這里,關(guān)于二維數(shù)組多次排序 或 嵌套list多次排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!