在这里的第一篇文章,我对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?)。

任何指导将不胜感激。

===============>>#1 票数:1

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

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;
}

未经测试。

===============>>#2 票数:0

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

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

如下所示:

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;
}

===============>>#3 票数:0

我可以乍一看这个算法

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

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

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

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

5)就这样

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

===============>>#4 票数:0

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

  ask by GATDev translate from so

未解决问题?本站智能推荐:

2回复

更新TreeMap的映射值 >

我正在读取类似的文件: 当前输出为... 我想要的输出是 我在for循环中经常被else语句绊倒。 我的教授给了我们伪代码,但是我不确定如何从TreeSet中获取现有成员集,然后对其进行更新。 编辑:谢谢! 你们两个都有很好的答案,确实帮助了我。
3回复

在Java中,在Map中使用Set作为键时应该采取什么预防措施?

我不确定在地图中使用动态对象(如集合作为键)的主流观点是什么。 我知道典型的Map实现(例如,HashMap)使用哈希码来决定将条目放入哪个桶,并且如果该哈希码应该以某种方式改变(可能因为Set的内容应该改变,那么那可能会弄乱)通过导致错误地计算存储桶来增加HashMap(与Set最初插入
1回复

更改键的地图元素不在集合B中

我确信这种情况经常出现,足以在某个地方解决,但是我不确定如何进一步搜索它。 我想修改映射的值,该映射的键不在集合B中。最佳方法是什么? 这就是我的想法:
2回复

在地图中查找匹配的键和值

在这个问题中,我必须在两个映射中找到所有匹配的键/值映射,然后将其返回到新映射中,但是我遇到了一些问题。 我的想法是从两个映射图中找到所有匹配的键,然后使用这些键将其引用为值。 如果值匹配,我会将键/值放入映射中。 我试图找出为什么它只是添加了所有共同的钥匙。 仅当其对应值也匹配时才添加
1回复

将键和值从一个映射复制到另一个映射[关闭]

我正在尝试将一个映射map1的键和值复制到另一个映射map2中。 映射1中的值存储在集合中,映射2应该将map1的值存储在列表中。 每个密钥在两个映射中应映射相同。 我可以遍历map1中的键,然后将这些键添加到map 2中。还可以使用另一个内部for循环将每个集合的元素添加到map2中
1回复

如何从地图中的值中获取一组值?

我有一个映射,其中包含多个键可能存在的值。 所以我想我需要像这样设置一个地图: Map<Integer, Set<Long>> myMap = new HashMap<Integer, Set<Long>> 我想从键的一组值中检索一个值。
1回复

JSON使用整数键转换Map

我有一小段测试代码,尝试将Map转换为JSON字符串并返回。 从JSON字符串解析时,结果映射包含字符串键“ 1”而不是整数键“ 1”,从而使测试失败。 POJO用作此映射的键也会发生相同的情况。 这是预期的行为还是我省略了JSON转换器的某些配置? 我正在使用jetty-util
4回复

是否有一个Java集合或列表可以根据给定的对象值返回对象键?

有没有一种方法可以在我可以提供密钥并接收关联对象的同时提供一个集合或列表,同时又可以提供该对象并接收该对象的密钥? 我可以制作两个相互交叉引用的HashMaps ,例如: 或者,我可以遍历keySet直到对象被匹配为止(但这似乎效率很低)。 有没有一种有效的方法可以仅使用一个
1回复

将HashMap添加到TreeSet的奇怪行为

我在将HashMap<String,String>到TreeSet<HashMap<String,String>>遇到以下问题。 代码如下: 现在,方法addAttribute()作用是: attributes变量是TreeSet<Ha
4回复

HashSet / HashMap等效的TreeSet / TreeMap(自定义哈希)

TreeSet有一个带比较器的构造函数,这意味着即使您存储的对象本身不是Comparable对象,您也可以提供自定义比较器。 是否有类似的无序集实现? (例如, HashSet<T>的替代方法是采用“hasher”对象来计算对象T的equals()和hashCode() ,这