【问题标题】:How to iterate over a List containing array of strings如何遍历包含字符串数组的列表
【发布时间】:2016-08-21 06:01:53
【问题描述】:

我正在使用 openCSV 阅读器阅读 csv 文件。有一种方法 readAll 会给出 List 作为结果。

List<String[]> myEntries = reader.readAll();

我想从中获取每个字符串。我试过了,但没有成功。

Iterator itr = myEntries.iterator();
while(itr.hasNext()) {
    Object element = itr.next();
    for(String temp:element)
       System.out.println(temp);
}

这给了我一个错误提示,foreach 不能应用于类型 Object。如何从中获取字符串?

【问题讨论】:

  • 为什么elementObject 而不是String[]
  • 您的代码中没有正确使用类型转换。

标签: java list foreach iterator


【解决方案1】:

如果解决它的方法对你来说不重要,我建议使用foreach 语句:

for(String[] a : myEntries)
    for(String s : a) 
        // do what you want to

否则,你应该写成这样

Iterator<String[]> iterator = myEntries.iterator();
while(itr.hasNext())
    for(String temp : itr.next()) 
        // Don't worry, itr.next() will be created only one time
        // for an each iteration (while)
        System.out.println(temp);

,看起来不太好看,可能阅读有困难。

【讨论】:

  • 第二个不起作用,它说 Foreach 不适用于类型对象
  • @LokeshS,不要使用原始类型的迭代器,我更正了
【解决方案2】:

列表元素的类型为String[]。在声明中使用它:

Iterator<String[]> itr = myEntries.iterator();

...

String[] element = itr.next();

【讨论】:

  • 不,它不起作用说必需:Java.lang.String[] 找到:Java.lang.Object。我很惊讶....我预计需要:对象,但发现:String[]
  • 是的,迭代器也需要正确输入。查看更新
【解决方案3】:

试试下面的代码,

for (String[] element : myEntries) {
    for (String temp : element)
        System.out.println(temp);

}

【讨论】:

    【解决方案4】:
    reader.readAll().forEach(stringArray -> {
       for(String element : stringArray){
          System.out.println(element);
       }
    });
    

    【讨论】:

      【解决方案5】:

      最简单的方法是使用 foreach 循环,就像您对数组所做的那样:

      for (String[] entry : myEntries) {
          for (String temp : element) {
              System.out.println(temp);
          }
      }
      

      如果你真的需要一个迭代器,那么不要使用原始类型:

      for (Iterator<String[]> it = myEntries.iterator(); it.hasNext();) {
          String[] entry = it.next();
          for (String temp : entry) {
               System.out.println(temp);
          }
      }
      

      您应该始终在块周围使用花括号,即使您的块只有一条指令。这使代码更易读、更易于维护,并有助于避免许多错误。

      【讨论】:

        【解决方案6】:

        如果您更喜欢 Java 8,它的声明性更强。

        myEntries.forEach(entries -> 
            Arrays.stream(entries).forEach(entry -> System.out.println(entry)));
        

        【讨论】:

          猜你喜欢
          • 2018-05-06
          • 2021-11-14
          • 1970-01-01
          • 2020-06-17
          • 2020-09-04
          • 1970-01-01
          • 2018-07-16
          • 2023-03-29
          • 1970-01-01
          相关资源
          最近更新 更多