gpt4 book ai didi

java - 如果 Keys 在 Java HashMap 中包含相同的子字符串,则获取所有值

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:55 25 4
gpt4 key购买 nike

我正在尝试从包含相同子字符串的键中获取所有值。例如:

如果一个Key的字符串是"AAABBB'另一个 Key 的字符串是 'XXXBBB'我想从这两个键中获取值。 (因为 BBB 匹配)


子串匹配的关系长度应该是3个字符。前缀来自索引 0-3,后缀索引来自 3-6。

例如:AAABBB (AAA为后缀,BBB为前缀。)

(AABBBA 关系被忽略,因为 AAB 和 BBA 不匹配。)

我试图避免使用嵌套 for 循环,因为我的算法在 O(N^2) 时运行非常慢。我正在努力寻找具有 1 个 HashMap 和 1 个 for 循环的解决方案。

HashMap a = new HashMap();

    map.put("AAABBB", 1);
map.put("CCCPPP", 2);
map.put("XXXBBB", 3);
map.put("AAAOOO",4);



for (Entry<String, String> entry : a.entrySet()) {
String prefix = entry.getKey().substring(0,3);
String suffix = entry.getKey().substring(3,6);

if(map.contains("ANY_SUBSTRING" + suffix){
System.out.println(map.get("ANY_SUBSTRING" + suffix);
}

}

输出:(1,3)

AAABBB => 1XXXBBB => 3

最佳答案

我对流有以下方法。

  • 定义一个函数来提取映射中每个键的后缀或前缀
  • 流式传输您的 map 条目集并按前缀/后缀分组
  • 过滤掉那些不常见的前缀/后缀

使用您的示例 map 并假设每个键的长度为 6

Map<String,Integer> map = new HashMap<>();
map.put("AAABBB", 1);
map.put("CCCPPP", 2);
map.put("XXXBBB", 3);
map.put("AAAOOO",4);

Function<Entry<String, Integer>,String> prefix = e -> e.getKey().substring(0,3);
Function<Entry<String, Integer>,String> suffix = e -> e.getKey().substring(3);

Map<String,List<Integer>> resultBySuffix =
map.entrySet().stream()
.collect(Collectors.groupingBy( suffix ,
Collectors.mapping(Entry::getValue, Collectors.toList())
)).entrySet().stream()
.filter(e -> e.getValue().size() > 1)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));

System.out.println(resultBySuffix);

Map<String,List<Integer>> resultByPrefix =
map.entrySet().stream()
.collect(Collectors.groupingBy( prefix ,
Collectors.mapping(Entry::getValue, Collectors.toList())
)).entrySet().stream()
.filter(e -> e.getValue().size() > 1)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));

System.out.println(resultByPrefix);

不知道上面例子的时间复杂度是多少。但我认为你可以看到发生了什么(在可读性方面)

关于java - 如果 Keys 在 Java HashMap 中包含相同的子字符串,则获取所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57775206/

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