当前位置: 首页 > 知识库问答 >
问题:

使用类可比java树映射获取containsValue

段恩
2023-03-14

我是新手。问题1——在将count=5的“Sam”添加到TreeMap之前,如何获得值为1的“Sam”计数?ie目前“sam”的计数为5。我希望计数是6。

问题2——关于人。Containsky,我怎样才能得到那个记录的“containsValue”或“count”?

蒂亚

package app;

import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;

class Person implements Comparable<Person> {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }

//  below sorts in alphabetic
    @Override
    public int compareTo(Person other) {
        return this.name.compareToIgnoreCase(other.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        return Objects.equals(name, other.name);
    }

}

public class App {

    public static void main(String[] args) {
        TreeMap<Person, Integer> people3 = new TreeMap<>();
        int count = 1;
        people3.put(new Person("sam"), count);
        people3.put(new Person("Tom"), count);
        people3.put(new Person("Bob"), count);
        count = 5;
        people3.put(new Person("Sam"), count);
        Set<Map.Entry<Person, Integer>> entrySet = people3.entrySet();
        int loop = 0;
        String strFind = "Tom";
        if (people3.containsKey(new Person(strFind))) {
            System.out.println("_How do I get the count for " + strFind + " ?");
        }
        for (Entry<Person, Integer> currentEntry : entrySet) {
            var uniqword = currentEntry.getKey();
            var sumcount = currentEntry.getValue();
            loop++;
            System.out.println("(" + loop + " ) " + uniqword + ": " + sumcount);
        }
    }

}

共有1个答案

范宏大
2023-03-14

对于你的第一个问题,使用合并而不是put

TreeMap<Person, Integer> people3 = new TreeMap<>();
int count = 1;
people3.put(new Person("Sam"), count);
people3.put(new Person("Tom"), count);
people3.put(new Person("Bob"), count);
count = 5;

people3.merge(new Person("Sam"), count, (oldVal, newVal) -> oldVal + newVal);

// or shorter

people3.merge(new Person("Sam"), count, Integer::sum);

对于你的第二个问题,只需使用get

Person personToFind = new Person("Tom");
if (people3.containsKey(personToFind)) {
    System.out.println("The count for " + personToFind + people3.get(personToFind));
}
 类似资料:
  • 当试图运行我的java程序时,我收到以下错误 适用代码: 澄清一下,当试图将产品和价值的TreeMap数据放入exportsData时,会出现问题。当试图将exportsData添加到将其键(国家)与exportsData(价值)相关联的exportsTable时,同样适用。我明白错误的含义,只是不知道如何修复它。此外,不允许库(目的是了解输入数据流向“行/列”,并尝试使用Trees、HashMa

  • 概述:最初,我对这个程序的预期目的是制作一个Treemap来读取文本文档,特别是找到所有单词和单词所在的索引/行。现在我想列出一个“十大”名单,其中包含使用最多的单词。我想“翻转”我的树状图,这样整型值将是按顺序排列的,然后是字符串

  • 我在目标语言为python的swig接口文件中成功地使用了以下类型映射: 然而,当我将目标语言更改为java时,当我尝试构建swg生成的自动生成的c包装代码时,我会遇到很多编译时错误,即。 等等... 我注意到,在python案例中,粘贴到swig包装器代码中的代码包含,等声明,这些代码来自 它位于 当目标语言为java时,此等效代码不会粘贴到swig包装器代码中。我不完全确定为什么不会发生这种情

  • 我正在尝试使用ModelMapper映射对象树。 我创建了一个例子来说明我的问题: 类包含多个属性 类包含类型为Sub的对象和(至少)另一个属性 类目标包含一个简单的属性列表 源属性和目标属性的类型不同 代码: 我正在寻找一种配置单个ModelMapper实例的方法,以便满足以下约束: modelMapper能够将Sub类型的对象转换为目标对象 不幸的是,行<代码>映射(source.sub,de

  • 我正在尝试将ArrayList转换为Treemap,所以我编写了一个比较各种方法的基准: 1)并行流中的toMap 2)toMap在流中 3)流中forEach 主 大小为10_000的输出如下 “for loop”与预期一样是最慢的 回到正题,为什么当arraylist列表很大时,for each in parallel steam会失败? 运行i7 2670QM,因此线程池大小应为8

  • 基本上,我的要求是通过使用反射来获取超类对象,以便获得字段名及其值。 所以,我有一门课 现在我正在使用 当我尝试使用以下代码访问该字段时,它会给我java.lang.Class类的类型。 它让我异常 有人能帮助我如何将其转换为对象,以便我可以访问文件夹