检查列表<string>是否包含来自另一个列表<string>

时间:2019-11-07 14:53:30

标签: java

我有两个不同的列表。一个仅包含服务标题,另一个包含文本中带有服务标题的长句子。我想找到一种方法来确定一个列表中的标题是否存在于另一列表的长句子中。我不是要查找这两个列表是否完全匹配。仅当其中一个包含另一个的内容时。

[Ex] 要验证字符串“ Application Scan”是否存在于list2的“这是其中包含Application Scan的示例句子”文本中

列表list1 = new ArrayList(); 列表list2 = new ArrayList();

    list1.add("Application Scan"); 
    list1.add("Antivirus and HIPS"); 
    list1.add("Backup Administration"); 

    list2.add("This is an example sentence that has Application Scan in it"); 
    list2.add("This is an example sentence that has Antivirus and HIPS in it"); 
    list2.add("This is an example sentence that has Backup Administration in it"); 


if (list2.containsAll(list1)) {
        System.out.print("Yes, list1 contents are in list2");
    }
    else {
        System.out.println("No, list1 contents are not within list2");
    }

到目前为止,我的方法一直说list2内找不到list1的内容,我不确定如何确切地解决此问题

2 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8,则可以使用:

if (list2.stream().anyMatch(l -> list1.stream().anyMatch(l::contains))) {

这意味着要检查list2中的每个元素可以包含list1中的任何元素

答案 1 :(得分:1)

您将必须迭代两个列表。由于list2包含大文本,因此外部循环将用于list2:

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>();
    list1.add("Application Scan");
    list1.add("Antivirus and HIPS");
    list1.add("Backup Administration");

    List<String> list2 = new ArrayList<>();
    list2.add("This is an example sentence that has Application Scan in it");
    list2.add("This is an example sentence that has Antivirus and HIPS in it");
    list2.add("This is an example sentence that has Backup Administration in it");

    list2.forEach(bigtext -> {
        list1.forEach(service -> {
            if (bigtext.contains(service)) {
                System.out.println(service);
            }
        });
    });
}

打印:

Application Scan
Antivirus and HIPS
Backup Administration

这样做是一样的:

for (String bigText : list2) {
    for (String service : list1) {
        if (bigText.contains(service))
            System.out.println(service);
    }
}