【问题标题】:String inside ArrayList<String[]>ArrayList<String[]> 内的字符串
【发布时间】:2017-06-03 23:04:19
【问题描述】:

如何检查ArrayList&lt;String[]&gt;中是否存在特定字符串?

我是否需要迭代每个项目并检查字符串或是否存在用于此目的的任何特定方法(如 ArrayList.contains() )?

试过 ArrayList.contains() 但在我的情况下不起作用。

不是ArrayList &lt;String&gt;,而是ArrayList&lt;String[]&gt;,所以这个问题不是重复的,我问这个问题是否存在任何特殊方法强>

【问题讨论】:

  • 我认为您必须循环并检查。没有我知道的deepContains
  • 你的列表是数组列表,你确定是你想要的吗?
  • 不,伙计们,这不是那个 Q 的副本。检查类型!
  • 这不是重复的,请在将其复制为重复之前检查一下(Navas pk 和 Elliott Sadgamer)
  • 仅用于检查迭代方法之前是否存在任何方法。

标签: java android string arraylist


【解决方案1】:

您可以使用两个 for-each 循环遍历 ArrayList

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

class Main {
  public static void main(String[] args) {
    ArrayList<String[]> arrayList = new ArrayList<String[]>();
    String[] fruit = {"Apple", "Banana"};
    String[] pets = {"Cat", "Dog"};
    arrayList.add(fruit);
    arrayList.add(pets);
    System.out.println(Arrays.deepToString(arrayList.toArray())); //[[Apple, Banana], [Cat, Dog]]
    System.out.println(arrayListContains(arrayList, "Apple")); //true
    System.out.println(arrayListContains(arrayList, "Orange")); //false
  }

  public static boolean arrayListContains(ArrayList<String[]> arrayList, String str) {
    for (String[] array : arrayList) {
      for (String s : array) {
        if(str.equals(s)) {
          return true;
        }
      }
    }
    return false;
  }
}

试试here!

【讨论】:

    【解决方案2】:

    使用 Java 8 流,您可以这样做:

    public boolean containsString(List<String[]> list, String s) {
               // Gives you a Stream<String[]>.
        return list.stream()
                   // Maps each String[] to Stream<String> (giving you a 
                   // Stream<Stream<String>>), and then flattens it to Stream<String>.
                   .flatMap(Arrays::stream)
                   // Checks if any element is equal to the input.
                   .anyMatch(Predicate.isEqual(s));
    }
    

    【讨论】:

      【解决方案3】:

      尝试看看 Guava Iterables.concat()

      它可以用来扁平化 Iterable 的 Iterable,我不确定它是否适用于 Iterable 的 Array 但它只是一个小小的转换...... 如果您可以展平您的列表,则可以对结果使用“包含”方法。

      【讨论】:

        【解决方案4】:

        您可以使用流轻松做到这一点:

        String contains;
        List<String[]> strings;
        boolean isPresent = strings.stream().flatMap(Arrays::stream).anyMatch(contains::equals);
        

        【讨论】:

          【解决方案5】:

          这是一个示例程序,可以满足您的要求...希望对您有所帮助

          public static void main(String[] args) {
                  ArrayList<String []> a = new ArrayList<>();
                  String b[] = {"not here","not here2"};
                  String c[] = {"not here3","i'm here"};
                  a.add(b);
                  a.add(c);
                  for (String[] array : a) {// This loop is used to iterate through the arraylist
                      for (String element : array) {//This loop is used to iterate through the array inside the arraylist
                          if(element.equalsIgnoreCase("i'm here")){
                              System.out.println("found");
                              return;
                          }
                      }
                  }
                  System.out.println("match not found");
          }
          

          【讨论】:

          • 感谢您的解释
          【解决方案6】:

          嗯,你需要遍历整个列表,然后遍历其中的每个数组才能找到项目。

          String valToBeSearched="abc";
          for(String [] arr: list)
          {
            for(String str: arr)
            {
               if(str.equals(valToBeSearched)){ // do your stuff}
            }
          }
          

          【讨论】:

          • @TimCastelijns - 数组类型没有 contains 方法。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 2015-12-07
          • 1970-01-01
          • 2011-12-15
          • 1970-01-01
          • 2011-12-02
          • 2010-10-14
          相关资源
          最近更新 更多