【问题标题】:Show List of Arrays in an ArrayList in Android在 Android 的 ArrayList 中显示数组列表
【发布时间】:2017-01-02 08:15:35
【问题描述】:

我正在尝试在 android 中创建一个 arraylist 列表。这是我期待的队友。

  [[90.35911560058594, 23.762723181676783],
  [90.36435127258301, 23.764608467290504],
  [90.36520957946776, 23.764922678903957],
  [90.36606788635254, 23.76327305946888],
  [90.36941528320312, 23.763901488386157],
  [90.3706169128418, 23.76445136119925],
  [90.36735534667969, 23.772070788117777],
  [90.3665828704834, 23.77324901017239],
  [90.3614330291748, 23.773327557929896],
  [90.35877227783203, 23.76979286188437],
  [90.35911560058594, 23.76979286188437]]

我使用了两个列表 List<Double> nodes = new ArrayList<>()List<List<Double>> list = new ArrayList<List<Double>>()。然后我添加了以下内容

                nodes.add(latLng.longitude);
                nodes.add(latLng.latitude);
                list.add(nodes);

但这显示了以下输出,

Coordinate_List: [81.5364906191826, 56.07605883895308, 86.5351914614439, 61.56546071581482, 94.52162001281975, 59.151354552315375]

所有元素都显示在一个数组列表中。但我需要展示这个 -

[[90.35911560058594, 23.762723181676783],
      [90.36435127258301, 23.764608467290504]]

谁能给我建议可能的方法来做到这一点?

【问题讨论】:

  • 什么是显示“以下输出”?哪个代码呈现此输出?
  • 您是否正在为每对坐标创建一个新的nodes 数组列表?

标签: java android list arraylist


【解决方案1】:

最好为 latlng 创建模型类。

public class LatLngSinglton{
   private double mylat;
   private double mylng;
}

然后在单例类中分配这些值

ArrayList<LatLngSinglton> myLatlongs = new ArrayList<>();
myLatlongs.add(new LatLngSinglton(lat, lng));

这样你就可以得到你期望的格式。

【讨论】:

  • 这里的单例类是什么意思?我假设您并不是说您的程序只有一个 LatLngSinglton 实例?
  • LatLngSinglton 类只是模型类。
【解决方案2】:

您能发布更多代码吗?您是否为每个坐标创建了一个新列表?看起来有点像您将所有坐标添加到同一个列表中。

也许这个最小的例子可以帮助你:

public class Main {
    public static void main(String[] args) {
        List<List<Double>> list = new ArrayList<List<Double>>();
        add(list, 10.5, 12.87);
        add(list, 20.5, 22.87);
        add(list, 30.5, 32.87);
        System.out.println(list);
    }

    private static void add(List<List<Double>> list, double lat, double lon) {
        List<Double> nodes = new ArrayList<Double>();
        nodes.add(lat);
        nodes.add(lon);
        list.add(nodes);
    }
}

输出:

[[10.5, 12.87], [20.5, 22.87], [30.5, 32.87]]

【讨论】:

  • add() 方法可以简单地实现为list.add(Arrays.asList(lat, lon))Arrays.asList() 返回一个固定大小的列表这一事实在这里不应该成为问题。
【解决方案3】:

不使用List&lt;Double&gt; nodes,而是使用JSONArray 存储longitudelatitude,然后将其添加到list

JSONArray jsonArray=new JSONArray();
jsonArray.add(latLng.longitude);
jsonArray.add(latLng.latitude);
list.add(jsonArray.toString());

【讨论】:

    【解决方案4】:

    您正在创建类型错误的数组列表。

    您必须使用List&lt;nodes&gt; nodes = new ArrayList&lt;&gt;() 而不是List&lt;Double&gt; nodes = new ArrayList&lt;&gt;()

    【讨论】:

    • 我知道。但是可以创建一个节点类型的列表(经纬度保存数组),我们可以将每个节点对象存储到列表中。我认为这是解决问题的简单方法。
    【解决方案5】:

    你为什么不创建

    List<LatLong> nodes=new ArrayList();
    

    并直接添加LatLong

    nodes.add(latLong);
    

    并获取数据

    for(...){
        LatLong latLong=nodes.get(int);
        double lat=laLong.lattitude;
        double longtude=latLong.longitude;
    }
    

    【讨论】:

      【解决方案6】:

      您不会在每次添加数据时都初始化节点。因此它不是那种格式。以这种方式实现。

      List<List<Double>> list = new ArrayList<>();
      
               //loop to add add data
              for(...){
              List<Double>nodes=new ArrayList<>();
              nodes.add(latLng.longitude);
              nodes.add(latLng.latitude);
              list.add(nodes);
              }
      

      【讨论】:

        【解决方案7】:

        最简单的方法是使用Arrays.asList()

        List<List<Double>> nodes = Arrays.asList(
                Arrays.asList(90.35911560058594, 23.762723181676783),
                Arrays.asList(90.36435127258301, 23.764608467290504),
                Arrays.asList(90.36520957946776, 23.764922678903957),
                Arrays.asList(90.36606788635254, 23.76327305946888 ),
                Arrays.asList(90.36941528320312, 23.763901488386157),
                Arrays.asList(90.3706169128418 , 23.76445136119925 ),
                Arrays.asList(90.36735534667969, 23.772070788117777),
                Arrays.asList(90.3665828704834 , 23.77324901017239 ),
                Arrays.asList(90.3614330291748 , 23.773327557929896),
                Arrays.asList(90.35877227783203, 23.76979286188437 ),
                Arrays.asList(90.35911560058594, 23.76979286188437 )
        );
        System.out.println(nodes);
        

        输出

        [[90.35911560058594, 23.762723181676783], [90.36435127258301, 23.764608467290504], [90.36520957946776, 23.764922678903957], [90.36606788635254, 23.76327305946888], [90.36941528320312, 23.763901488386157], [90.3706169128418, 23.76445136119925], [90.36735534667969, 23.772070788117777], [90.3665828704834, 23.77324901017239], [90.3614330291748, 23.773327557929896], [90.35877227783203, 23.76979286188437], [90.35911560058594, 23.76979286188437]]
        

        如果您需要重新调整nodes 列表的大小,请执行以下操作。无需对每个节点都这样做,因为它们的大小始终为 2。

        List<List<Double>> nodes = new ArrayList<>(Arrays.asList(
                Arrays.asList(90.35911560058594, 23.762723181676783),
                 . . .
                Arrays.asList(90.35911560058594, 23.76979286188437 )
        ));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-15
          • 2017-08-18
          • 2019-01-03
          • 2012-01-10
          • 1970-01-01
          • 2020-07-25
          • 2011-09-17
          • 1970-01-01
          相关资源
          最近更新 更多