2010-09-15 4 views
0

Как я могу найти строки 4,1 и 6 в примере ниже?
И полезно ли использование Collection.sort() с Comparator в этом случае?Java-компаратор для простой пользовательской логики

 a - b - c - d 

1.) 6 8 16 18 
2.) 38 40 55 57 
3.) 6 8 25 27 
4.) 1 5 11 15 
5.) 6 8 3 5 
6.) 9 12 19 22 
7.) 18 20 1 3 
8.) 23 25 15 17 

Пример на вершине списка с объектом удовлетворяет следующим критериям:
- каждый объект содержит 4 целое число (а, б, в, г),
- каждый объект в списке является уникальным,
- a < b и c < d.


Ниже приведен не рабочий пример, но мой образ мышления, как я могу ожидать, что компаратор будет работать для поиска ожидаемого объекта.

public class Row_Filter implements Comparable<Row_Filter>{ 
    int a,b,c,d; 
    public Row_Filter(int a, int b, int c, int d) { 
     this.a = a; this.b = b; this.c = c; this.d = d; 
    } 
    static class FilterAccordingAB implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      return o2.a - o1.b+1; 
     } 
    } 
    static class FilterAccordingCD implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      return o2.c - o1.d+1; 
     } 
    } 
    static class FilterAccordingABCD implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      FilterAccordingAB abF=null; FilterAccordingCD cdF=null; 
      if((abF.compare(o1, o2)==0) && (cdF.compare(o1, o2)==0)){ 
       return 1; 
      } 
      return -1; 
     } 
    } 
} 
+6

Это будет домашнее задание? –

+1

Что особенного в линиях 1,4 и 6? –

+0

Какие типы объектов вы имеете в виду? ... так много вопросов означает, что ваш вопрос плохой! – pstanton

ответ

3

Что вам нужно сделать, это реализовать интерфейс Компаратор . Посмотрите на JavaDocs для этого интерфейса. Вам нужно будет написать класс, который реализует интерфейс. Это предполагает написание одного метода (вам не нужно переопределять equals()).

Метод получает два объекта. Посмотрите, какое значение вам нужно вернуть из метода, чтобы показать, что два объекта являются «равными» в соответствии с вашими требованиями. Затем напишите код, чтобы вернуть это значение, когда они «равны», в соответствии с вашими требованиями.

Если какое-либо из этих вопросов неясно, вам нужно будет найти базовый учебник по Java для написания методов, написания классов или использования интерфейсов.

+0

+1: точно, как вы реализуете и т.д. – aperkins

0

Кажется, вы смущены, когда будете использовать компаратор. DJClayworth описывает именно КАК его создать. Вы могли бы использовать один в, например, механизм сортировки:

Collections.sort(myList, myComparator); 

Вы используете это, потому что вы можете определить алгоритм сравнения для сортировки по коллекции. Надеюсь, что это поможет прояснить ситуацию.

+0

Спасибо, Аперкинс. Я не очень смущен, где использовать компаратор (в случае списка). Но как описать критерии соответствия для компаратора в языке-компараторе. – jackdaniels

+0

На самом деле я запутался, если подумал о том, как уменьшить размер списка, объединив объекты. Таким образом, я должен создать 2-й список, итерации через 1-й список, совпадающий с значениями совпадающего объекта и вызова с помощью каждого метода Collection.sort(). Для более крупного списка это, похоже, не является перфомантным решением. Если кто-то интересуется ниже, это ссылка для первоначального описания всей проблемы. Ссылка: HTTP: //stackoverflow.com/questions/3712669/java-extended-collection-filtering – jackdaniels

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