【问题标题】:Deleting certain rows from a 2D list从 2D 列表中删除某些行
【发布时间】:2019-01-07 02:45:56
【问题描述】:

我想知道从我的二维数组列表中删除/操作特定行的最佳方法。以下是示例列表:

 [ [Facebook, Bob, Mark , Yes],
    [Facebook, Bob, Priscilla, Yes],
    [Tesla, Bill, Elon, Yes],
    [Tesla, Bill, Maye, Yes],
    [Apple, Jim, Tim, Yes] ]

基本上,我不想要重复,因为我只需要处理 list.get(0) 和 list.get(1) 所以我想要一个结果列表,它只给我类似的东西:

[[Facebook, Bob],[Tesla,Bill],[Apple, Jim]]

这给了我一个仅包含 2D ArrayList 子级的前两个唯一元素的列表。

【问题讨论】:

    标签: java list arraylist multidimensional-array


    【解决方案1】:

    我会流式传输列表,从每个列表中获取前两个值,获取唯一结果并收集它们:

    List<List<String>> data = /* data */ ;
    
    List<List<String> result =
        data.stream()
            .map(l -> l.subList(0, 2))
            .distinct()
            .collect(Collectors.toList());
    

    【讨论】:

    • 啊.. 想不出收集方法!我在不必要地创建多个 for 循环。谢谢!我会试试这个:)
    • Set&lt;List&lt;String&gt; -> Set&lt;List&lt;String&gt;&gt;.unique() -> .distinct()Collectors.toList() -> Collectors.toSet().
    • @saka1029 对我的血液来说太晚了,显然 :-( 感谢您指出这些 - 已编辑和修复。
    • @saka 是的,我在尝试时发现了这一点!正要发表同样的评论!!谢谢你们!
    【解决方案2】:

    如果我正确阅读了您的问题(根据另一个数组的某些列创建数组),您可以做的是编写一个脚本,循环遍历每个数组并将该点的项目添加到另一个数组中。例如

    ArrayList<ArrayList<{ITEM CLASS}>> cpy = new ArrayList<ArrayList<{ITEM CLASS>>();
    for(int i = 0; i < List.Length; i++)
    {
       cpy.Add(new ArrayList<{ITEM CLASS}>);
       for(int j = 0; j < List.get(0).Length; j++)
         {
             if(j == CopyIndex)
             {
                 cpy.get(i).Add(List.get(i).get(j));
             }
         }
    
    }
    

    或者类似的东西 ^(我还没有测试过,所以它可能无法正常工作,但这是一般概念)

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2011-03-17
      • 2019-12-29
      • 1970-01-01
      • 2013-05-28
      • 2012-05-16
      相关资源
      最近更新 更多