Skip to content

Commit 5e7bb50

Browse files
committed
Use sets with chunking to avoid saving same channel
1 parent 1db740b commit 5e7bb50

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

src/main/java/org/phoebus/channelfinder/ChannelRepository.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@
3535
import java.util.Collections;
3636
import java.util.Comparator;
3737
import java.util.HashSet;
38+
import java.util.LinkedHashSet;
3839
import java.util.List;
3940
import java.util.Map;
4041
import java.util.Optional;
42+
import java.util.Set;
4143
import java.util.concurrent.ExecutorService;
4244
import java.util.concurrent.Executors;
4345
import java.util.concurrent.Future;
@@ -124,11 +126,10 @@ public Channel index(Channel channel) {
124126
* @return the created channels
125127
*/
126128
public List<Channel> indexAll(List<Channel> channels) {
127-
128129
List<Future<List<Channel>>> futures = new ArrayList<>();
129130

130131
for (int i = 0; i < channels.size(); i += chunkSize) {
131-
List<Channel> chunk = channels.stream().skip(i).limit(chunkSize).collect(Collectors.toList());
132+
List<Channel> chunk = channels.stream().skip(i).limit(chunkSize).toList();
132133
futures.add(
133134
executor.submit(
134135
() -> {
@@ -232,16 +233,13 @@ public Channel save(Channel channel) {
232233
@Override
233234
public <S extends Channel> Iterable<S> saveAll(Iterable<S> channels) {
234235
List<Future<List<Channel>>> futures = new ArrayList<>();
235-
List<Channel> channelList =
236-
StreamSupport.stream(channels.spliterator(), false).collect(Collectors.toList());
236+
Set<Channel> channelList =
237+
StreamSupport.stream(channels.spliterator(), false).collect(Collectors.toCollection(LinkedHashSet::new));
237238

238239
for (int i = 0; i < channelList.size(); i += chunkSize) {
239240
List<Channel> chunk = channelList.stream().skip(i).limit(chunkSize).toList();
240241
// Create a list of all channel names
241-
List<String> ids =
242-
StreamSupport.stream(chunk.spliterator(), false)
243-
.map(Channel::getName)
244-
.collect(Collectors.toList());
242+
Set<String> ids = chunk.stream().map(Channel::getName).collect(Collectors.toCollection(LinkedHashSet::new));
245243
Map<String, Channel> existingChannels =
246244
findAllById(ids).stream().collect(Collectors.toMap(Channel::getName, c -> c));
247245

0 commit comments

Comments
 (0)