2015-04-13 3 views
1

Мне интересно, можно ли использовать диапазон Guava для перебора списка пользовательских объектов.Использование диапазона Guava с пользовательским объектом

У меня есть этот пример, который должен получить интервал 5 элементов в списке:

Range<CustomObject> range = Range.closed(customObjectList.get(Auxiliar.index), customObjectList.get(Auxiliar.index + 4)); 

И тогда я хотел бы перебирать на этом диапазоне, чтобы получить мой список объектов, я имею в виду, чтобы быть в состоянии сделать что-то вроде этого:

List<CustomObject> list = new ArrayList<CustomObject>(); 
for(CustomObject c : range){ 
    list.add(c) 
} 

на данный момент я не могу сделать это Еогеасп на Range Гуава, вместо этого я должен сделать это как here:

for(int grade : ContiguousSet.create(yourRange, DiscreteDomain.integers())) { 
    ... 
} 

Но здесь проблема в том, что я не могу использовать DiscreteDomain.CustomObject().

Есть ли способ использовать этот диапазон Гуава со списком CustomObject?

+0

Это должно быть, так как 'DiscreteDomain' является абстрактным классом ... Однако пользовательский объект Безразлично» t похоже, что это позволит вам реализовать метод 'next()' и 'previous()' этого класса. Наличие кода этого класса позволит получить более подробный ответ. – fge

ответ

3

Если вы читали Range «s:

Javadoc

Обратите внимание, что это не представляется возможным, чтобы перебрать этих содержащихся значений. Для этого передайте этот экземпляр диапазона и соответствующий DiscreteDomain в ContiguousSet.create(com.google.common.collect.Range<C>, com.google.common.collect.DiscreteDomain<C>).

Так что ваш подход является правильным, за исключением того, что вам нужно создать пользовательский DiscreteDomain для пользовательского объекта:

public class CustomDiscreteDomain extends DiscreteDomain<CustomObject> { 
    //override and implement next, previous and distance 
} 

Это может или не может быть практичными в зависимости от того, что эти объекты.

Simplistic пример с LocalDate (вероятно, потребуется дополнительная проверку границ, нуль проверки и т.д.):

public static class LocalDateDiscreteDomain extends DiscreteDomain<LocalDate> { 
    @Override public LocalDate next(LocalDate value) { 
    return value.plusDays(1); 
    } 
    @Override public LocalDate previous(LocalDate value) { 
    return value.minusDays(1); 
    } 
    @Override public long distance(LocalDate start, LocalDate end) { 
    return DAYS.between(start, end); 
    } 
} 
+0

Спасибо за ответ, очень полезно. – AlexDG

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