我想知道是否可以使用Guava Range对自定义对象列表进行迭代。
我有这个示例,它应该在列表中获得5个项目的间隔:
Range<CustomObject> range = Range.closed(customObjectList.get(Auxiliar.index), customObjectList.get(Auxiliar.index + 4));
Run Code Online (Sandbox Code Playgroud)
然后,我想遍历此范围以获得我的对象列表,以便能够执行以下操作:
List<CustomObject> list = new ArrayList<CustomObject>();
for(CustomObject c : range){
list.add(c)
}
Run Code Online (Sandbox Code Playgroud)
目前,我不能做一个番石榴范围本的foreach,而不是我要做的,像这里:
for(int grade : ContiguousSet.create(yourRange, DiscreteDomain.integers())) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是这里的问题是,我不能使用DiscreteDomain.CustomObject()。
有没有办法将此Guava Range与CustomObject列表一起使用?
如果您阅读Range的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
}
Run Code Online (Sandbox Code Playgroud)
取决于那些对象是什么,这可能可行,也可能不可行。
具有的简单示例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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |