二维数组多次排序 或 嵌套list多次排序

这篇具有很好参考价值的文章主要介绍了二维数组多次排序 或 嵌套list多次排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可以排序int[ ][ ]的顺序,也可以排序List<List<Integer>> 顺序

为便于理解,以力扣原题为例:1333.餐厅过滤器

原题中给了一个双重数组,并要求返回一个List<Integer>。

方法1
会用流的,通常用于会反应把双重数组转成List<List<Integer>>去处理这个双重数组,于是解题思路如下:

public static List<Integer> filterRestaurants2(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
	//构造嵌套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());
}

可是该方式耗空间较大,于是又会想,能不能从直接用数组的方式,不另外构造新对象。

方法2:

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;
        }
    }

	//双重数组排序
    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:文章来源地址https://www.toymoban.com/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)
    //双重数组排序
    .sorted((a1, a2) -> a1[1] == a2[1] ? a2[0] - a1[0] : a2[1] - a1[1])
    .map(a -> a[0])
    .collect(Collectors.toList());
}

到了这里,关于二维数组多次排序 或 嵌套list多次排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java的list数组按数组中对象的某个属性排序

    在 Java 中,可以使用 Collections.sort() 方法和 Comparator 接口来对 List 中的对象按照对象的某个属性进行排序。以下是一个示例代码: 假设有一个 Person 类,它包含一个 name 字符串属性和一个 age 整数属性,我们可以通过对 ListPerson 类型的列表进行排序,按照 Person 对象的 age 属性

    2024年02月04日
    浏览(45)
  • 【Java基础教程】(八)面向对象篇 · 第二讲:Java 数组全面解析——动态与静态初始化、二维数组、方法参数传递、排序与转置、对象数组、操作API~

    掌握数组的动态及静态创建方式、使用及特征; 掌握引用类型数据的特征; 掌握数组的排序、转置操作; 数组可以将多个变量进行统一的命名,这样相同类型的元素就可以按照一定的顺序进行组合排列 。在 Java中,数组属于引用类型数据,所以在数组的操作过程中,也一定

    2024年02月13日
    浏览(53)
  • FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)

    原文网址:FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)_IT利刃出鞘的博客-CSDN博客 本文介绍FreeMarker的list的用法。 Java Freemaker _index是list的一个属性 嵌套时前面要有括号,如下,将字符串变成list,然后取第i个元素的值 嵌套时前面要有括号,如下,将字符串变成li

    2024年02月12日
    浏览(37)
  • Java | 数组排序算法

    冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移到数组前面,把较大的元素移到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部升到顶部。 直接选择排序的基本思想是将指定排序位置与其他数组元素分别

    2024年02月15日
    浏览(28)
  • Java 数组常见的排序和查找算法

    2、数组 2.1、常见的算法: 排序算法: 冒泡排序算法 选择排序算法 2.2、算法实际上在 java 中已经封装好了。 排序可以调用方法。例如:java 中提供了一个数组工具类: java.util.Arrays Arrays 是一个工具类。 其中有一个 sort() 方法,可以排序。静态方法,直接使用类名调用就行。

    2024年01月17日
    浏览(46)
  • 【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)

    作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法( 公众号同名 ) ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的 关

    2024年04月22日
    浏览(40)
  • 【第43天】sort 的复杂运用 | 对二维数组与结构体实现自定义排序

    本文已收录于专栏 🌸《Java入门一百练》🌸

    2024年01月17日
    浏览(39)
  • 二维list的使用(java)

    想必大家对int[ ] [ ]这样的二维数组的初始化,赋值,遍历已经很熟悉了,但java中的二维list就很少能接触到。但遇到了也不慌,接下来就对二维的list深入使用。 先导入java.util.ArrayList和java.util.List这两个包 (这里使用Integer类型做示范,String类型也可,其它类型有些适用) 这

    2024年02月09日
    浏览(27)
  • 【算法】激光炸弹(二维数组前缀和)

    地图上有 N 个目标,用整数 Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 Wi。 注意 :不同目标可能在同一位置。 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所有目标。 激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆

    2024年01月25日
    浏览(43)
  • JAVA——二维数组遍历二维数组的三种方法

    目录 🍒java中二维数组的定义和赋值 🍒二维数组遍历的三种方法 🍇第一种:for循环遍历 🍇第二种方法:通过Arrays.deepToString()遍历 🍇第三种方法:通过for(   :   )遍历 二维数组其实就是特殊的一维数组; 在java中将这句话诠释得淋漓尽致; 运行截图: 运行截图: 注意

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包