gpt4 book ai didi

java - 如何在java中迭代和比较Hashtable>>

转载 作者:行者123 更新时间:2023-11-30 02:03:33 24 4
gpt4 key购买 nike

我的结构如下,

Key: active-csr-HA-profile & Value: {sapd-outside=[outside], sapd-extra4=[extra4], sapd-extra3=[extra3], sapd-inside=[inside]}
Key = sapd-outside, Value = [outside]
Key = sapd-extra4, Value = [extra4]
Key = sapd-extra3, Value = [extra3]
Key = sapd-inside, Value = [inside]
Key: standby-csr-HA-profile & Value: {sapd-outside=[outside], sapd-extra4=[extra4], sapd-extra3=[extra3], sapd-inside=[inside]}
Key = sapd-outside, Value = [outside]
Key = sapd-extra4, Value = [extra4]
Key = sapd-extra3, Value = [extra3]
Key = sapd-inside, Value = [inside]

上面的if格式为Hashtable<String, Map<String, Set<String>>>

我想比较 active-csr-HA-profile 的 sapd-outside 是否与standby-csr-HA-profile 的键之一相同。因此,将 active-csr-HA-profile 的每个 key 与standby-csr-HA-profile 的每个 key 进行比较。

我看了一些类似的问题,但我正在解决的问题并没有解决目的。

最佳答案

正如评论中已经提到的, Hashtable 被认为是过时的。它的替代品是 HashMap 。如果您愿意,请调用 HashMap以同样的方式同步 Hashtable确实,请使用 Collections::synchronizedMap 装饰器就可以了。

您的 Hashtable 的结构看起来有点不清楚。我想以下结构最适合您的结构,我的解决方案基于它。

Hashtable<String,  Map<String, Set<String>>> map = new Hashtable<>();

Map<String, Set<String>> activeCsrHAProfile = new HashMap<>();
activeCsrHAProfile.put("sapd-outside", new HashSet<>(Arrays.asList("outside")));
activeCsrHAProfile.put("sapd-extra4", new HashSet<>(Arrays.asList("extra4")));
activeCsrHAProfile.put("sapd-extra3", new HashSet<>(Arrays.asList("extra3")));
activeCsrHAProfile.put("sapd-inside", new HashSet<>(Arrays.asList("inside")));

Map<String, Set<String>> standbyCsrHAProfile = new HashMap<>();
standbyCsrHAProfile.put("sapd-outside", new HashSet<>(Arrays.asList("outside")));
standbyCsrHAProfile.put("sapd-extra4", new HashSet<>(Arrays.asList("extra4")));
standbyCsrHAProfile.put("sapd-extra3", new HashSet<>(Arrays.asList("extra3")));
standbyCsrHAProfile.put("sapd-inside", new HashSet<>(Arrays.asList("inside")));

map.put("active-csr-HA-profile", activeCsrHAProfile);
map.put("standby-csr-HA-profile", standbyCsrHAProfile);

如果我的结构与您的有点不同,修改解决方案以匹配您的结构是没有问题的 - 原理是相同的。

Set<String> sapdOutsideOfActiveCsrHAProfile = map.get("active-csr-HA-profile")
.get("sapd-outside");

map.get("standby-csr-HA-profile").entrySet()
.stream()
.filter(i -> i.getValue().containsAll(sapdOutsideOfActiveCsrHAProfile))
.forEach(e -> System.out.println("Found at: " +
"key=" + e.getKey() + ", value=" + e.getValue()));
  • .filter(i -> i.getValue().containsAll(..)过滤那些值为 Set<String> 的条目包含所有必需的字符串。
  • .forEach(..)让消费者对所有匹配结果执行操作。

如果您需要boolean代表匹配是否发生,执行:

boolean matches = map.get(..).entrySet().stream().filter(..).findFirst().isPresent();

关于java - 如何在java中迭代和比较Hashtable<String, Map<String, Set<String>>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com