我需要在特定位置获取一个元素,Iterable<MyType>以免遍历所有元素,Iterable<MyType>因为我知道所需元素位于哪个位置(就我而言,遍历所有元素将花费 O(n) 时间,另一方面访问特定的将花费 O(1) 时间)。这必须是最后一个之前的元素。但我找不到办法做到这一点。
public interface Iterable<T>,显然,没有方法来访问任意位置的元素。
我尝试投射Iterable<MyType>到,List<MyType>但投射在运行时失败了ClassCastException。所以我不能使用ListIterator<E>, simpleList.get(E e)或一些自定义Function<T, U>来向后遍历元素或获取这个元素(我打算做的这些事情)。
我当前的代码
// list.getItems() returns Iterable<MyType>
// I know that element I am looking for is at (iterable.size - 2) position
for(MyType item : list.getItems()) {
if (item.convertToText().matches(targetElementRegex)) {
Pattern pattern = Pattern.compile(targetElementRegex);
Matcher matcher = pattern.matcher(item.convertToText());
if (matcher.find()) {
return Optional.of(Integer.parseInt(matcher.group(1)));
}
}
}
正如您目前看到的,我只是循环遍历所有元素,Iterable<T>直到到达目标元素,尽管我知道我正在寻找的目标元素位于哪个位置。我想在Iterable<MyType>.
我想找出最有效的方法来做到这一点(或者至少是比我当前的解决方案更好的方法)。
UPD:list是来自第三方库的类的实例,我没有写,我也可以在类getItems()中添加新的东西。list
牧羊人nacy
慕丝7291255
狐的传说
慕工程0101907
相关分类