验证列表是否包含来自不同列表的字符串的方法

时间:2016-07-15 00:15:47

标签: java

是否有一种方法可以验证给定的两个列表

List<String> models;
List<String> titleOfVehicle;

每个models必须包含titleOfVehicle之一。

例如,给出以下内容:

models = {Accord, Civic, Element}
titleOfVehicle1 = {2014 Honda Accord, 2011 Toyota Camry}
titleOfVehicle2 = {2013 Honda Accord, 2015 Honda Element, 2011 Honda Civic}

然后在比较modelstitleOfVehicle1时,它会失败,因为2011 Toyota Camry不包含所提供的模型之一。但是,titleOfVehicle2将通过,因为它包含每个车辆标题的模型。

我已经创建了一个执行此操作的算法,但是,每当我创建算法时,似乎已经有一个方法可以执行此操作,所以我想知道是否有已经构建的方法可以执行此操作?

2 个答案:

答案 0 :(得分:2)

没有内置功能,但您可以按照Java 8功能样式提出单行内容:

titleOfVehicle.stream().allMatch(
    title -> models.stream().anyMatch(title::contains)
)

答案 1 :(得分:1)

由于 OP 尚未使用Java 8,所以我认为我会贡献冗长的方式,这也可以完成工作。

<强>代码:

private void doIt() {
    List<String> models = new ArrayList<>(Arrays.asList("Accord", "Civic", "Element"));
    List<String> titleOfVehicle1 = new ArrayList<>(Arrays.asList("2014 Honda Accord", "2011 Toyota Camry"));
    List<String> titleOfVehicle2 = new ArrayList<>(Arrays.asList("2013 Honda Accord", "2015 Honda Element", "2011 Honda Civic"));

    boolean hasAllModels = true;
    for (String model : models) {
        boolean foundModel = false;
        for (String title : titleOfVehicle2) {
            if (title.contains(model)) {
                foundModel = true;
                break;
            }
        }
        if (!foundModel) {
            hasAllModels = false;
            break;
        }
    }

    if (hasAllModels) {
        System.out.print("Yay found one that matches it!.");
    }
    else {
        System.out.print("The list does not contain all of the models that you are looking for.");
    }
}

public static void main(String args[]) {
    new test().doIt();
}

<强>算法: 这里的逻辑是我首先遍历models列表中的所有模型。然后,对于此实例,我使用titleOfVehicle2字符串API逐个浏览contains中的字符串,以检查整个单词是否为2014 Honda Accord包含单词Accord

如果是,那么我们知道它已经通过了第一次测试,然后一直持续到找到所有model个单词。

这不是一个有趣的解决方案,但contains API可能就是重点。你可能想看一下。 https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence)