【问题标题】:Copying last 3 elements of ArrayList into List<String>将 ArrayList 的最后 3 个元素复制到 List<String>
【发布时间】:2020-04-21 18:47:46
【问题描述】:

我目前试图将每个迭代路径的最后 3 个元素复制到 lastEdgePath 中,但无济于事。此外,lastEdgePath 必须是 List &lt; String &gt; 类型。 List of Arraylists allPaths 有效,对于这个问题,假设它已被填充。这是我尝试过的,目前正在发生的是将最后 3 个元素作为 1 添加到 lastEdgePath 中,而我需要将它们作为 3 个不同的元素添加。示例:如果路径为 [1,2,3,4,5,6] lastEdgePath 将变为 [4,5,6]

public static List<ArrayList<String>> allPaths = new ArrayList<>();

for(ArrayList<String> path : allPaths){
      List<String> lastEdgePath = Collections.singletonList(path.get(path.size() - 3) + path.get(path.size() - 2) + path.get(path.size() - 1));
}

【问题讨论】:

    标签: java arrays list arraylist copy


    【解决方案1】:

    使用subList:

    List<String> lastThreeThings = path.subList(path.size() - 3, path.size());
    

    请注意,这是底层列表的视图,因此对lastThreeThings 的更改会反映在path 中。如果您需要单独的列表,请将其复制:

    List<String> lastThreeThings = new ArrayList<>(path.subList(path.size() - 3, path.size()));
    

    另外,请注意,这不能处理少于 3 个元素的列表。如果可能,请使用Math.max(0, path.size() - 3) 作为开始索引。

    【讨论】:

      【解决方案2】:

      只需使用 subList 方法即可。

      public static List<ArrayList<String>> allPaths = new ArrayList<>();
      
      for(ArrayList<String> path : allPaths){
            List<String> lastEdgePath = path.subList(path.size() - 3, path.size());
      }
      

      需要注意的一件非常重要的事情是,这会产生指定范围的视图,这意味着子列表中的任何更改都将反映在原始列表中,反之亦然。

      【讨论】:

        猜你喜欢
        • 2014-04-12
        • 1970-01-01
        • 2014-07-22
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2019-05-08
        相关资源
        最近更新 更多