2016-07-15 36 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