如果我有一個FluentIterable
,如何得到沒有索引爲i
的元素的新的FluentIterable
?在Guava無索引元素的情況下可迭代
0
A
回答
3
這裏沒有內置任何東西,也沒有特別好的實現。
我老老實實建議使用一個可變的列表和調用remove(int index)
。流暢的視圖鏈對於這種用例似乎不太可能有效。
0
這裏有一個辦法做到這一點沒有可變名單:
FluentIterable.concat(myIterable.limit(i), myIterable.skip(i + 1));
而這裏的一個稍微性能方法:
ImmutableList<String> list = ImmutableList.copyOf(myIterable);
FluentIterable.concat(
list.subList(0, i - 1),
list.subList(i + 1, list.size() - 1));
注意#subList
由原始ImmutableList
支持,所以我們只迭代通過myIterable
曾經在這裏。
0
您可以通過應用轉換到其索引中的每個元素相關聯,然後過濾掉你不想要索引的元素,最後用它的索引變換的每個元素回到剛纔的元素做到這一點。例如:
fluentIterable
.transform(new WithIndexTransformer<>())
.filter(indexedValue -> indexedValue.getIndex() != i)
.transform(IndexedValue::getValue);
IndexedValue.java
public class IndexedValue<T> {
private final int index;
private final T value;
IndexedValue(int index, T value) {
this.index = index;
this.value = value;
}
public int getIndex() {
return index;
}
public T getValue() {
return value;
}
}
WithIndexTransformer.java
public class WithIndexTransformer<T> implements Function<T, IndexedValue<T>> {
private int index = 0;
@Override
public IndexedValue<T> apply(T input) {
return new IndexedValue<>(index++, input);
}
}
相關問題
- 1. 在不改變索引的情況下操作數組元素
- 2. 如何在不知道對象是否可迭代的情況下迭代
- 3. JavaScript - 在不影響索引的情況下將元素插入到數組中?
- 4. CSS可以在以下情況下使用元素:hover?
- 5. 在不擴大環繞元素的情況下移動元素
- 6. 如何檢查元素在我的情況下是否可見?
- 7. 如何僅在元素可見的情況下執行邏輯
- 8. 如何在給定迭代次數的情況下檢索double for循環的索引?
- 9. 硒無法在元素上迭代
- 10. 在不使用迭代的情況下在Python中查找單元格
- 11. 在不使用collect的情況下在apache spark中迭代RDD
- 12. 通過迭代器獲取集合元素的「索引」
- 13. 如何在不使用指針或引用的情況下迭代二叉樹?
- 14. 下列情況下的迭代器何時失效
- 15. 在只打印一次的情況下迭代字典
- 16. 在不使用迭代器的情況下過濾列表
- 17. 在性能考慮的情況下對大表進行迭代
- 18. 在沒有初始化的情況下迭代一個數組
- 19. 在不使用遞歸的情況下迭代父節點PHP
- 20. 如何在沒有Iterator的情況下迭代Set/HashSet?
- 21. 在沒有迭代的情況下獲取密鑰YAML-cpp
- 22. 迭代刪除引用元素
- 23. 如何爲可迭代元素的glob
- 24. 關於可迭代元素的斷言
- 25. 循環索引在迭代
- 26. 在Python中迭代索引
- 27. 列表元素與奇數索引跳過迭代,爲什麼?
- 28. 在不使迭代器無效的情況下添加和刪除項目
- 29. 迭代JSON元素在JavaScript
- 30. 如何在將元素放在引號中的情況下加入數組?
注意你_can,_但它不會是非常有效的,特別是如果你做這不止一次。 –
正確的話,它會經歷迭代兩次而不是一次。我想知道是否有一個內置的過濾器函數可以將值和索引作爲一對。然後你可以通過索引進行過濾。 –
你可能可以通過'Streams.mapWithIndex'將數據流關閉,但如果你需要這樣的事情,你真的會變得更好。 –