2013-09-13 2 views
0

Я хочу сравнить два arraylists, содержащих экземпляры двух отдельных классов друг с другом.Сравнение двух arraylists с содержит экземпляры классов

Например: первый список: HKY SGP 15:00 3 20:20 700

второй список: 1 HKY SGP 8:00

так, если первый список содержит слова HKY и ПСР, то значение 700 должно быть возвращено. Оба они сравниваются в отдельном классе, называемом стоимостью. Я передаю arraylists этому классу затрат, используя основной метод. Этот класс затрат затем переходит на сравнение с арраистами.

Что я пробовал: Я искал проблему и пытался использовать некоторые решения, которые они предоставили. Я пробовал использовать содержит или равный. Это дает мне неправильное значение.

Затем я попытался использовать метод get из обоих классов для сравнения. Он также не дает желаемого результата.

Я думаю, что я сравниваю оба этих объекта неправильно, не уверен, как сравнивать. Может ли кто-то пролить свет на то, как сравнивать эти объекты с арраистом?

Спасибо!

Код в основной:

ArrayList<planes> air = new ArrayList<>(); 
    ArrayList<questions> q = new ArrayList(); // same as below for questions 

    Scanner sc = new Scanner(System.in); 
    num = sc.nextInt(); 


    for (int i=0; i<num; i++){ 
     planes p = new planes(); 

     p.setfrom(sc.next()); 
     p.setTo(sc.next()); 
     p.setdT(sc.next()); 
     p.setaD(sc.next()); 
     p.setaT(sc.next()); 
     p.setCt(sc.next()); 
     air.add(p); 


    } 
+2

Вы можете оставить часть вашего кода, поэтому мы можем посмотреть –

+1

Как об использовании ориентации объекта, то есть вместо того, чтобы использовать списки различных струнных инструментов, создать класс, который содержит эти строки и может сравнить себя с другим экземпляром этого класса? – Matthias

+0

if (list1.contains ("HGY") && list1.contains ("SGP") && list2.contains ("HGY") && list2.содержит («SGP»)) {return 700; } – SpongeBobFan

ответ

3

Написать обычай Comparator<T> делать то, что вам нужно.

Возможно регулярное выражение для обоих будет сделать это:

// two Strings both contain "foo" 
return x.matches("[foo]") && y.matches("[foo]"); 

Если регулярное выражение не может это сделать, реализовать свой собственный Кнут-Морриса-Пратта Искателя:

http://www.ics.uci.edu/~eppstein/161/960227.html

0

Вы можете реализовать a Comparator<T>. Таким образом, интерфейс реализации должен будет переопределить его метод compare(T arg0, T arg1). В T вы можете поместить любой тип для сравнения. Как ArrayList <>(), класс, строка и т. Д. И проверить, содержит ли строка HKY SGP; если они соседствовали всегда, то вы можете сразу же нравится:

public int compare(String list1, String list2) { 

    return list1.contains("HKY SGP") && list2.contains("HKY SGP") ? 700 : 0; 
} 

это вернет 700, если обе строки содержит «HKY ПМГ» еще 0.

Если «SGP» не всегда после того, как «HKY», то просто проверьте для каждого из них. Что-то вроде:

return list1.contains("HKY") && list1.contains("SGP") && list2.contains("HKY") && list2.contains("SGP") ? 700 : 0; 
+0

Спасибо :) Но, я ищу, чтобы сравнить оба списка, поэтому, если список 1 содержит значения в списке 2, то будет выведено 700. – Phantom

+1

, так что вы говорите, что сравниваете «** воздух **» с «** q **»? Но на самом деле вам нужно сравнить некоторое свойство ** planes ** (например, string/getFrom()) с некоторым свойством ** вопросов ** (например, строки), а затем вернуть 700 вправо? Поправьте меня если я ошибаюсь. Для этого из списков вы можете взять определенную позицию и класс в этой позиции и передать их для сравнения с некоторыми ее свойствами. Если я прав, то дайте мне знать, чтобы мы могли обсудить, как сравнить два класса diff. Также дайте мне знать, какие переменные находятся в ** вопросах ** класса. – thegiga

+0

Да, вы правы. В настоящее время я сделал это в методе стоимости, чтобы проверить, правильно ли передано значение, для (int i = 0; i Phantom

Смежные вопросы