从一个ArrayList中查找String作为Java 8中另一个ArrayList String的Charsequence

时间:2016-03-27 16:39:06

标签: java arraylist

我的Java例程应该从一个String中找到ArrayList作为另一个char ArrayList的{​​{1}}序列。

如果我从目标String中的来源String搜索ArrayList项,那么它就有效。 如果目标ArrayList项具有更多字母数字文字,我尝试使用ArrayList序列找到所需部分。

单词中的简短示例:

  

ArrayList_A项目:" A0B"," C1D"," E2F"
  ArrayList_B项目:" A0B"

结果:在char项目(工作)中找到项目B

  

ArrayList_A项目:" A0B / C1D"," E2F"
  ArrayList_B项目:" A0B"

结果:在ArrayList_A项目中找到了项目B(这是我想要的其他内容)

以下是我部分工作的代码。任何人都可以修复它,以便我可以从解决方案中学习?

ArrayList_A

4 个答案:

答案 0 :(得分:3)

首先,您应该使用功能样式编程。 forEach()不允许你超过(...)

的标准

完全匹配

ArrayList<String> arrayListFound = arrayListB.stream()
          .filter(arrayListA::contains)
          .collect(Collectors.toList());

用于子串匹配

ArrayList<String> arrayListFound = arrayListB.stream()
          .filter(itemB -> arrayListA.stream()
                 .matchAny(itemA -> itemA.contains(itemB))
           )
          .collect(Collectors.toList());

答案 1 :(得分:2)

您可以对这两个集合进行流式处理,并使用String#contains代替List#contains

它会将String中包含的B的所有相应A个对象添加到arrayListFound

arrayListB.stream().forEach(b ->
    arrayListA.stream().forEach(a -> {
        if (a.contains(b)){
            arrayListFound.add(b);
        }
    }
));

答案 2 :(得分:0)

if(arrayListA.contains((CharSequence)searchStr)){
    System.out.print(" - found!" );
    arrayListFound.add((String) searchStr);
}

此代码段显示,&#34;如果我的列表中包含此字符串,则会找到&#34;。但您的字符串A0BA0B/C1D不同。迭代这两个列表并检查contains的{​​{1}}方法,而不是String,我们会找到您需要的内容。 E.g:

ArrayList

答案 3 :(得分:0)

仅稍微修改您的实现的替代解决方案如下。

arrayListB.stream().forEach((searchStr) -> {
    if(arrayListA.stream().anyMatch(str -> str.contains((CharSequence)searchStr))){
        System.out.print(" - found!" );
        arrayListFound.add((String) searchStr);
    }
    else {
        System.out.print(" - not found");
    }
});

我。我们可以使用效果优于anyMatch的{​​{1}}。

II。这里我们检查foreach中是否存在任何字符串,该字符串会将arrayListA的searchStr作为子字符串。

要在不改变arrayListB列表的情况下以纯函数方式执行此操作,可以采用以下方法:

arrayListFound