Skip to content

Commit 45d3200

Browse files
committed
apply
1 parent 09c0b70 commit 45d3200

File tree

1 file changed

+24
-11
lines changed
  • iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/pattern

1 file changed

+24
-11
lines changed

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/pattern/IoTDBTreePattern.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,11 @@
3131

3232
import org.apache.tsfile.file.metadata.IDeviceID;
3333

34+
import java.util.ArrayList;
3435
import java.util.Arrays;
3536
import java.util.Collections;
36-
import java.util.HashSet;
3737
import java.util.List;
3838
import java.util.Objects;
39-
import java.util.Set;
40-
import java.util.stream.Collectors;
41-
import java.util.stream.IntStream;
4239

4340
public class IoTDBTreePattern extends IoTDBTreePatternOperations {
4441

@@ -71,13 +68,29 @@ private String getDefaultPattern() {
7168

7269
public static <T> List<T> applyReversedIndexesOnList(
7370
final List<Integer> filteredIndexes, final List<T> originalList) {
74-
final Set<Integer> indexes = new HashSet<>(filteredIndexes);
75-
return Objects.nonNull(originalList)
76-
? IntStream.range(0, originalList.size())
77-
.filter(index -> !indexes.contains(index)) // 保留不在排除列表中的下标
78-
.mapToObj(originalList::get)
79-
.collect(Collectors.toList())
80-
: null;
71+
// No need to sort, the caller guarantees that the filtered sequence == original sequence
72+
final List<T> filteredList = new ArrayList<>(originalList.size() - filteredIndexes.size());
73+
int filteredIndexPos = 0;
74+
int processingIndex = 0;
75+
for (; processingIndex < originalList.size(); processingIndex++) {
76+
if (filteredIndexPos >= filteredIndexes.size()) {
77+
// all filteredIndexes processed, add remaining to the filteredList
78+
if (processingIndex < filteredIndexes.size()) {
79+
filteredList.addAll(originalList.subList(processingIndex, originalList.size()));
80+
}
81+
break;
82+
} else {
83+
int filteredIndex = filteredIndexes.get(filteredIndexPos);
84+
if (filteredIndex == processingIndex) {
85+
// the index is filtered, move to the next filtered pos
86+
filteredIndexPos++;
87+
} else {
88+
// the index is not filtered, add to the filteredList
89+
filteredList.add(originalList.get(processingIndex));
90+
}
91+
}
92+
}
93+
return filteredList;
8194
}
8295

8396
@Override

0 commit comments

Comments
 (0)