2016-05-27 4 views
-3

у меня есть один список массива, имеющее значение, как:Сравните два ArrayLists в Java, которые имеют частичные общие ценности

IT инфраструктура
Команда
Wave Analytics Starter Kit
Блог Сообщение
Case Studies
инфографика
Grazitti Разработка сайта-Реконструкция

и другой список, массив, имеющий значения, как:

Wave Analytics Starter Kit56: 00: 00
IT Infrastructure01: 00: 00
Teams08: 00: 00
Блог Post21: 30: 00
Case Studies02: 30 : 00
InfoGraphics02: 45: 00
Grazitti Сайт-Revamp11: 00: 00
Marketing03 Содержание: 00: 00
Off-Page Content04: 30: 00
SMM05: 00: 00
Гость Blog01: 30: 00
LiNC 1600: 30: 00
Alteryx Inspire Конференция 201625: 30: 00
PPC02: 00: 00
Training13: 45: 00

Могу ли я сравнить их, чтобы получить выход как:

IT Infrastructure01: 00 : 00
Teams08: 00: 00
Wave Аналитика Starter Kit56: 00: 00
Блог Post21: 30: 00
Case Studies02: 30: 00
InfoGraphics02: 45: 00
G razitti Сайт-Revamp11: 00: 00

Следующий фрагмент кода не дает желаемого выводе:

for(int c =0; c<extractedvalue.size(); c++){ 
System.out.println(extractedvalue.get(c)); 
      if (extractedvalue.contains(hoursplusprojects.get(c))){ 
       System.out.println(hoursplusprojects.get(c)); 
      } 
+0

Да, вы можете. На первом этапе можно подумать о том, как пройти оба списка таким образом, чтобы вы могли сравнивать каждый элемент в одном списке, с каждым элементом в другом. Сколько циклов вы считаете нужным? – MaxG

ответ

0

Вот правильный ответ с некоторыми примерами кода:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 



public class Test { 

    public static void main(String ...args){ 

     List<String> a = new ArrayList<String>(); 
     a.add("abc"); 
     a.add("def"); 
     a.add("ghi"); 
     a.add("jkl"); 

     List<String> b = new ArrayList<String>(); 
     b.add("abc 123"); 
     b.add("def 456"); 
     b.add("ghi 789"); 
     b.add("xyz 111"); 

     Map<String, String> map = new HashMap<String, String>(); 
     for (String item: b){ 
      map.put(strip(item), item); 
     } 

     Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator(); 
     while (iter.hasNext()){ 

      Entry<String, String> entry = iter.next(); 

      if (!a.contains(entry.getKey())){ 
       iter.remove(); 
      } 
     } 

     System.out.println(map.values()); 
    } 

    private static String strip(String input){ 
     return input.split(" ")[0]; 
    } 
} 
+0

Разве он не даст ему пустой набор? Один список содержит только имя, а другое содержит имя + время или что-то еще. – MaxG

+0

Hi MaxG. Ты прав. Я не заметил дополнительных данных. – maccaroo

1

Вот решение в O (нм). n и m - размеры ваших массивов. Решение работает в том случае, если у двух массивов есть структура, которую вы проиллюстрировали в своем вопросе.

List<String> l1 = new ArrayList<String>(); 

//update l1 

List<String> l2 = new ArrayList<String>(); 

//update l2 

List<String> results = new ArrayList<String>(); 

for(String s1 : l1){ 
    for(String s2 : l2){ 
     if(s2.contains(s1)){ 
      results.add(s2); 
     } 
} 

//print the results 
for(String r : results){ 
    System.out.println(r); 
} 
0

Проверьте следующее решение. Если у вас есть какие-либо вопросы, пожалуйста, спросите.

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class Test { 

    public static void main(String[] args) { 

     List<String> extractedvalue =Arrays.asList 
       ("IT Infrastructure", 
       "Teams", 
       "Wave Analytics Starter Kit", 
       "Blog Post", 
       "Case Studies", 
       "InfoGraphics", 
       "Grazitti Site Development-Revamp"); 


     List<String> hoursplusprojects =Arrays.asList 
       ("Wave Analytics Starter Kit56:00:00", 
       "IT Infrastructure01:00:00", 
       "Teams08:00:00", 
       "Blog Post21:30:00", 
       "Case Studies02:30:00", 
       "InfoGraphics02:45:00", 
       "Grazitti Site Development-Revamp11:00:00", 
       "Content Marketing03:00:00", 
       "Off-Page Content04:30:00", 
       "SMM05:00:00", 
       "Guest Blog01:30:00", 
       "LiNC 1600:30:00", 
       "Alteryx Inspire Conference 201625:30:00", 
       "PPC02:00:00", 
       "Training13:45:00"); 

     List<String> output=new ArrayList<String>(); 


     for (String extractedvalueItem : extractedvalue) { 
      for(String hoursplusprojectItem : hoursplusprojects){ 
       if(hoursplusprojectItem.startsWith(extractedvalueItem)){ 
        output.add(hoursplusprojectItem); 
       } 
      } 
     } 

     System.out.println("EXTRACTEDVALUE:"); 
     print(extractedvalue); 
     System.out.println("HOURSPLUSPROJECTS:"); 
     print(hoursplusprojects); 
     System.out.println("OUTPUT"); 
     print(output); 
    } 

    private static void print(List<String> list){ 
     for (String item : list) { 
      System.out.println(item); 
     } 
     System.out.println(); 
    } 
} 
Смежные вопросы