2016-07-15 87 views
1

字符串是否有可以验证给两个列表的方法,方法验证如果列表包含来自不同列表

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将通过,因为它包含每个车辆标题的模型。


我已经创建了一个算法,这样做,但是,每当我创建的算法,好像已经有,做它的方法,所以我想知道如果有一个已建成的方法,做这个?

+3

没有将检查*子*的另一份名单内置方法。 – Andreas

+1

如果您使用的是Java 8(Lambdas),那么您可以在一行中进行相当流利的检查。 –

回答

2

没有内置这一点,但你可以想出一个内胆,之后在Java 8功能的风格:

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

我不在java 8下,但看到这个后,我很快就会哈哈大笑。谢谢您的帮助! – Robben

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中的字符串 - 使用contains字符串API逐个检查整个单词,例如2014 Honda Accord包含字Accord

如果是的话,那么我们就知道它已经通过了第一个测试,直到所有的model话被发现,那么这样下去。

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

+0

感谢您的帮助! – Robben