2017-01-19 2 views
-7

Как проверить, существует ли конкретная строка внутри ArrayList<String[]>?Строка внутри ArrayList <String[]>

Нужно ли мне перебирать каждый элемент и проверять строку или какой-либо конкретный метод для этой цели (например, ArrayList.contains())?

Tried ArrayList.contains(), но не работает в моем случае.

Это не ArrayList <String> это ArrayList<String[]> так что этот вопрос не является дубликатом один, и я спрашиваю это для любопытства, присутствует ли какой-либо специальный метод или нет

+0

Я думаю, вы должны цикла и проверить. Нет «глубоких советов», о которых я знаю. – Thilo

+0

Ваш список - это список массивов, вы уверены, что это то, что вы хотите? – Yoleth

+0

Вам придется перебирать. Но это довольно неэффективная структура данных для этого. – Fildor

ответ

4

Это пример программы, чтобы получить то, что вы просили ... надеюсь, что это помогает

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"); 
} 
+0

Спасибо за объяснение –

1

Ну, вам нужно пройти весь и затем перемещайте каждый массив внутри него, чтобы найти элемент.

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

@TimCastelijns - для типов массивов метод 'contains' отсутствует. –

1

Вы можете перебрать 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

Вы можете сделать это легко с помощью потоков:

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

Попробуйте взглянуть на Guava Iterables.concat().

Его можно использовать для выравнивания Iterable Iterables, я не уверен, что он будет работать на Iterable of Array, но это всего лишь небольшая трансформация ... Если вы можете сгладить свой список, вы можете использовать " содержит "метод результата.

1

Использование 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)); 
} 
Смежные вопросы