从网站验证码谈用户体验,建设工程中标信息查询,酒泉建设局造价官网站,网站改版意见方案可以排序int[ ][ ]的顺序#xff0c;也可以排序ListListInteger 顺序
为便于理解#xff0c;以力扣原题为例#xff1a;1333.餐厅过滤器
原题中给了一个双重数组#xff0c;并要求返回一个ListInteger。
方法1#xff1a; 会用流的#xff0c…可以排序int[ ][ ]的顺序也可以排序ListListInteger 顺序
为便于理解以力扣原题为例1333.餐厅过滤器
原题中给了一个双重数组并要求返回一个ListInteger。
方法1 会用流的通常用于会反应把双重数组转成ListListInteger去处理这个双重数组于是解题思路如下
public static ListInteger filterRestaurants2(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {ListListInteger 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();}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());
}可是该方式耗空间较大于是又会想能不能从直接用数组的方式不另外构造新对象。
方法2
public static ListInteger 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;}}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());
}但是提交的结果然后是耗时耗空间。 既然数组能用流处理那是不是可以全部用流的形式过滤和排序呢 方法3
public static ListInteger 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).sorted((a1, a2) - a1[1] a2[1] ? a2[0] - a1[0] : a2[1] - a1[1]).map(a - a[0]).collect(Collectors.toList());
}