|
31 | 31 |
|
32 | 32 | import org.apache.tsfile.file.metadata.IDeviceID; |
33 | 33 |
|
| 34 | +import java.util.ArrayList; |
34 | 35 | import java.util.Arrays; |
35 | 36 | import java.util.Collections; |
36 | | -import java.util.HashSet; |
37 | 37 | import java.util.List; |
38 | 38 | import java.util.Objects; |
39 | | -import java.util.Set; |
40 | | -import java.util.stream.Collectors; |
41 | | -import java.util.stream.IntStream; |
42 | 39 |
|
43 | 40 | public class IoTDBTreePattern extends IoTDBTreePatternOperations { |
44 | 41 |
|
@@ -71,13 +68,29 @@ private String getDefaultPattern() { |
71 | 68 |
|
72 | 69 | public static <T> List<T> applyReversedIndexesOnList( |
73 | 70 | 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; |
81 | 94 | } |
82 | 95 |
|
83 | 96 | @Override |
|
0 commit comments