是否有一种方法可以验证给定的两个列表
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}
然后在比较models
和titleOfVehicle1
时,它会失败,因为2011 Toyota Camry
不包含所提供的模型之一。但是,titleOfVehicle2
将通过,因为它包含每个车辆标题的模型。
我已经创建了一个执行此操作的算法,但是,每当我创建算法时,似乎已经有一个方法可以执行此操作,所以我想知道是否有已经构建的方法可以执行此操作?
答案 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)