如何检查包含ArrayList的ArrayList中是否存在值

时间:2018-05-23 14:45:51

标签: java arraylist

所以,我有一个包含另一个ArrayList的ArrayList,我正在尝试查看内部Arraylist是否包含我正在寻找的值。如果是,我想返回该数组所在的索引。

 List<List<String>> messages = parseMessages(extract.getPath());

        String needle = "test";
        messages.stream()  // Stream<List<String>>
                .filter(message -> message.contains(needle))
                .flatMap(List::stream)  // Stream<String>
                .forEach(System.out::println);

所以我在ArrayList中捕获了一个ArrayList之后编写了这段代码。

我尝试访问的数组是“Messages”,其中包含另外两个arraylist。

我想使用contains方法检查内部arraylist是否包含一个值并返回该arrayList的索引。

由于

1 个答案:

答案 0 :(得分:3)

试试这个

messages.stream()  
        .filter(message -> message.contains(needle))
        .map(message -> message.indexOf(needle))
        .forEach(System.out::println);

map阶段返回值的索引。即使在找到包含needle的匹配内部列表之后,这也将继续用于其他列表。要在第一场比赛后停止,您可以使用findFirst

 messages.stream()
        .filter(message -> message.contains(needle))
        .map(message -> message.indexOf(needle))
        .findFirst()
        .ifPresent(System.out::println);

如果您想获取外部列表的索引

IntStream.range(0, messages.size())
        .filter(index -> messages.get(index).contains(needle))
        .forEach(System.out::println);

再次,在一场比赛后停止,

IntStream.range(0, messages.size())
        .filter(index -> messages.get(index).contains(needle))
        .findFirst()
        .ifPresent(System.out::println);