【问题标题】:How do I get length of list of lists in Java?如何在 Java 中获取列表列表的长度?
【发布时间】:2011-07-27 15:19:03
【问题描述】:

如果我在 Java 中有 List<List<String>> 数据,我可以通过代码获取第一个列表的长度:

int lengthData = data.get(0).size();

但是如何在不遍历列表列表的情况下获取结构中列表的数量呢?

也许我有点不清楚。我有结构:

List<List<String>> data 

我看到了:

int i = data.size();

将等于 1,因为它是根列表。所以我想知道有多少子列表。像这样遍历结构:

for (List<String> l : data) {                     
     total ++;                
}

只给我一个我觉得奇怪的结果 1。

我有以下形式的数据:

List 1 ==> 1, 2, 3, 4
List 2 ==> 3, 8. 9, 1

等等,这些是根列表的子列表。

【问题讨论】:

  • 你不能。你必须遍历,或者使用更复杂的列表来为你遍历......
  • 你不能?是不是一个列表那么长,要遍历它真的很困难?
  • 如果 data.size() 返回 1,那么您没有有两个子列表。你有一个。这就是为什么迭代它也只会给出一个结果。您所说的一切都指向原始数据中的问题。我怀疑如果你想出一个简短但完整的程序来演示这个问题,你就会找出问题所在。
  • 是的。这就是问题所在。现在已经解决了。

标签: java list


【解决方案1】:

随便用

int listCount = data.size();

这告诉你有多少列表(假设没有一个为空)。如果你想知道有多少 strings,你需要迭代:

int total = 0;
for (List<String> sublist : data) {
    // TODO: Null checking
    total += sublist.size();
}
// total is now the total number of strings

【讨论】:

  • 我在发布之前已经尝试过了。出于某种原因,这没有给出正确的结果。
  • @Mr Morgan:我对此表示怀疑。请发布一个简短但完整的程序来演示该问题。
  • @Mr Morgan,List.size() 也是我所期望的。您能否提供一个示例,说明它何时没有 产生所需的结果?另外,您对外部列表使用什么具体实现?
【解决方案2】:

Java 8

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public class HelloWorld{

     public static void main(String []args){
            List<List<String>> stringListList = new ArrayList<>();
            stringListList.add(Arrays.asList(new String[] {"(0,0)", "(0,1)"} ));
            stringListList.add(Arrays.asList(new String[] {"(1,0)", "(1,1)", "(1,2)"} ));
            stringListList.add(Arrays.asList(new String[] {"(2,0)", "(2,1)"} ));

            int count=stringListList.stream().mapToInt(i -> i.size()).sum();

            System.out.println("stringListList count: "+count);
     }
}

【讨论】:

  • 无法工作,因为 size() 方法不是 getter,即不是 getSize()。这意味着例如在 jsp 中我们不能做像 这样的简单事情。这是一个祸根,我想知道为什么从来没有任何努力来解决这个问题。
【解决方案3】:

导入 java.util.ArrayList;

公共类TestClass {

public static void main(String[] args) {

    ArrayList<ArrayList<String>> listOLists = new ArrayList<ArrayList<String>>();
    ArrayList<String> List_1 = new ArrayList<String>();
    List_1.add("1");
    List_1.add("2");
    listOLists.add(List_1);

    ArrayList<String> List_2 = new ArrayList<String>();
    List_2.add("4");
    List_2.add("5");
    List_2.add("10");
    List_2.add("11");
    listOLists.add(List_2);
    for (int i = 0; i < listOLists.size(); i++) {
        System.out.print("list " + i + " :");
        for (int j = 0; j < listOLists.get(i).size(); j++) {
            System.out.print(listOLists.get(i).get(j) + " ;");
        }
        System.out.println();
    }

}

}

我希望这个解决方案可以更好地了解列表如果列表

【讨论】:

    【解决方案4】:

    最外层列表中包含的列表计数

    int count = data.size();
    

    lambda 获取包含的内部列表的计数

    int count = data.stream().collect( summingInt(l -> l.size()) );
    

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 2023-04-06
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2014-03-16
      • 2015-11-20
      相关资源
      最近更新 更多