我有2个列表:
L1=[2,4,7,9,14,15,17]
和L2=[2,3,6]
第二个列表包含我想要提取第一个元素的元素的索引。
for(int i=0;i<L1.size();i++){
if(L2.contains(i)){
//Do sth
}
}
我想获得一个子列表L=[7,9,17]
,而不必浏览整个列表L1
。
谢谢。
答案 0 :(得分:4)
循环通过L2,因为它包含您感兴趣的L1的所有索引:
for(int i : L2) {
if(i < L1.length) {
//Do sth with L1.get(i)
}
}
如果您确定L2的值是L1中的有效索引,则不需要条件:
for(int i : L2) {
// Do sth with L1.get(i)
}
答案 1 :(得分:1)
您可以将两者包装成自己的List
:
class ListComb<T> extends AbstractList<T> implements List<T> {
private final List<T> l;
private final List<Integer> comb;
public ListComb(List l, List<Integer> comb) {
this.l = l;
this.comb = comb;
}
@Override
public T get(int index) {
return l.get(comb.get(index));
}
@Override
public int size() {
return comb.size();
}
}
public void test(String[] args) {
ListComb<Integer> l = new ListComb<>(Arrays.asList(2,4,7,9,14,15,17), Arrays.asList(2,3,6));
System.out.println(l);
}