From 0503e32c0c8f0d288ce22a4f4d9ce96062cfd965 Mon Sep 17 00:00:00 2001 From: Samir Romdhani Date: Tue, 19 May 2026 11:18:54 +0200 Subject: [PATCH] optimize Network#getConnectables(Class), avoid full scan Signed-off-by: Samir Romdhani --- .../java/com/powsybl/iidm/network/impl/NetworkImpl.java | 2 +- .../java/com/powsybl/iidm/network/impl/NetworkIndex.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkImpl.java index 6ac2d051e74..646b50479cf 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkImpl.java @@ -954,7 +954,7 @@ public Iterable getConnectables(Class clazz) { @Override public Stream getConnectableStream(Class clazz) { - return index.getAll().stream().filter(clazz::isInstance).map(clazz::cast); + return index.streamAssignable(clazz); } @Override diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkIndex.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkIndex.java index 1f5012ac875..1da8fd470b5 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkIndex.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/NetworkIndex.java @@ -14,6 +14,7 @@ import java.io.PrintStream; import java.util.*; +import java.util.stream.Stream; /** * @@ -119,6 +120,13 @@ Set getAll(Class clazz) { return (Set) all; } + Stream streamAssignable(Class clazz) { + return objectsByClass.entrySet().stream() + .filter(e -> clazz.isAssignableFrom(e.getKey())) + .flatMap(e -> e.getValue().stream()) + .map(clazz::cast); + } + boolean contains(String id) { String idFromPotentialAlias = idByAlias.getOrDefault(id, id); checkId(idFromPotentialAlias);