繁体   English   中英

基于Map中TreeSet中的值范围的返回键

[英]Return Key Based on Range of Values in a TreeSet within Map

在这里的第一篇文章,我对Java(以及一般编程)还是很陌生!

我试图了解当地图包含其他集合时如何操作。 我正在尝试编写代码以将名称存储为与Map中整数集相对的值的键。 然后,我希望能够返回具有属于给定范围内的元素的任何值的键。

Map<String, Set<Integer>> index = new TreeMap<>();
Set<Integer> numbers = new TreeSet<>;

numbers.add(80);
numbers.add(90);
numbers.add(100);
index.put("Adam", numbers);

numbers = new TreeSet<>();
numbers.add(30);
numbers.add(40);
numbers.add(50);
index.put("Eve", numbers);

现在,我有了一个映射,键为“ Adam”且值为[80、90、100],另一个键为“ Eve”且值为[30、40、50]。 至少我认为我有!

现在,我希望能够返回落在给定范围内的所有键保持值的名称。

例如,如果范围是25到50,则返回值将为“ Eve”。 如果范围是50到85,则返回均为“ Adam”和“ Eve”。

我以为containsValue()可能有效,但不起作用(因为Set?)。

任何指导将不胜感激。

在不更改您的设计的情况下,我唯一想到的方法是遍历地图和每个值集,但效率不高:

public Set<String> containsRange(Map<String, Set<Integer>> index, int lowerBound, int upperBound){
    Set<String> result = new HashSet<>();
    for (Map.Entry<String, Set<Integer>> entry : index.entrySet()) {
        String string = entry.getKey();
        for (Integer integer : entry.getValue()) {
            if (integer >= lowerBound && integer <= upperBound) {
                result.add(string);
                break;
            }
        }
    }
    return result;
}

未经测试。

我认为您将无法使用任何标准地图方法来完成此任务。 特别是,地图非常适合通过键而不是通过值访问事物。

我认为在这种情况下,最好创建一个自定义对象列表。 自定义对象将包含值列表和字符串。 当您想要获得所有具有该范围内的值的字符串时,可以遍历列表,并用匹配的列表填充新列表。

如下所示:

List<RangedString> index = new ArrayList<RangedString>();
...
public List<String> getStringInRange(int low, int high) {
    List<String> results = new ArrayList<String>();
    for (RangedString rangedString : index) {
        if (rangedString.inRange(low, high)) {
            results.add(rangedString.getString());
        }
    }
}

RangedString.inRange方法如下所示:

Set<Integer> values;
...
public boolean inRange(int low, int high) {
    for (Integer value : values) {
        if (value >= low && value <= high) {
            return true;
        }
    }
    return false;
}

我可以乍一看这个算法

1)制作一个哈希表来存储关键结果

2)迭代星期四图,然后迭代集合的每个元素。

3)将其与输入范围进行比较。

4)如果存在,则将其添加到哈希集中。

5)就这样

在这里使用哈希集将确保唯一的键结果。

您必须编写一个自定义逻辑,以遍历映射中每个条目的每个集合,并在条目的期望范围内获得相应的键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM