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

如果我有两个值相等的键,我如何返回设置种类(值 " - " 键,键)?

太叔英锐
2023-03-14

只有当我有一对像名字(值)数字(键)这样的代码时,这段代码才有效,但我遇到了像名字数字、数字这样的情况。它返回名称number1,名称number2

 public Set<String> getAllContacts() {
        TreeSet<String> contacts = new TreeSet<>();
        if (phoneBook.isEmpty()) {
            return new TreeSet<>();
        } else {
            for (Map.Entry<String, String> entry : phoneBook.entrySet()) {
                contacts.add(entry.getValue() + " - " + entry.getKey());
            }
        }
        return contacts;
    }

共有1个答案

澹台文博
2023-03-14

基本上,你想要反转你的电话簿地图的。根据您的示例,一个名称可以有多个编号s,因此输出结构应该是Map

Map<String, List<String>> phoneBookByName = new HashMap<>();
phoneBook.forEach((k, v) -> {
    List<String> numbers = phoneBookByName.computeIfAbsent(k, s -> new ArrayList<>());
    numbers.add(v);
});
TreeSet<String> contacts = new TreeSet<>();
phoneBookByName.forEach((k, v) -> contacts.add(k + " - " + String.join(", ", v)));
return contacts;

或者使用流

Map<String, List<String>> phoneBookByName = phoneBook.entrySet().stream()
    .collect(Collectors.groupingBy(Map.Entry::getValue, Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
return phoneBookByName.entrySet().stream()
    .map(entry -> entry.getKey() + " - " + String.join(", ", entry.getValue()))
    .collect(Collectors.toCollection(TreeSet::new));

 类似资料:
  • 例如,如果我有一个哈希表 字符串名;整数; 给定一个特定的键,如何只返回值的名称或数字? 目前,我可以在哈希表中找到密钥并返回它的值,但它返回的是“Value@2c6a3f77”我猜测@...是一个与程序如何存储数据相关的索引。

  • 问题内容: REDIS中有任何快速命令可以让我执行以下操作吗? 我想将键Y的值设置为等于键X的值。 我如何从Redis Client执行此操作。 我使用标准的Redis-cli客户端。 基本上,我正在寻找以下等效项- 问题答案: 您可以使用Lua脚本执行此操作: KEYS1是源密钥 KEYS2是目标键 下面的示例使用SCRIPT LOAD创建脚本,并使用EVALSHA传递以下参数来调用该脚本: 从

  • 问题内容: 我有一个2D整数数组。我希望将它们放入HashMap中。但是我想从基于数组索引的HashMap访问元素。就像是: 对于A [2] [5],它返回与该键关联的值。但是,如何使用一对密钥创建一个hashMap?或者通常是多个键:以一种我可以使用get(key1,key2,… keyN)来访问元素的方式。 编辑:发布问题3年后,我想再添加一点 我遇到了另一种方法。 数组索引,和可被表示为一个

  • Object.hashCode()的Java文档是这样说的: 如果根据equals(Object)方法,两个对象相等,那么对两个对象中的每一个调用hashCode方法都必须产生相同的整数结果。 但是他们没有解释为什么两个相等的对象必须返回相等的哈希码。为什么Oracle工程师决定在重写时必须重写? 的典型实现不调用方法: 在《有效Java》(第二版)中,我读到: 第9项:当重写Equals时,始终

  • 我有一个JSON对象列表,我想访问一个名为“91842301”的键。请参见下面的代码。 我该怎么做呢? 我尝试过使用find、where、propertyOf等函数,但这些函数没有考虑到我正在搜索一个对象列表,我只知道该对象的键,而不知道该对象在列表中的位置。

  • 问题内容: 我有一个像这样的模型: 我想迁移并同时托管这两个主机是主键。 问题答案: 我将以稍微不同的方式来实现。 我将使用默认的主键(自动字段),并使用meta class属性, 它将充当“代理”主键列。 如果您确实要创建多列主键,请查看此应用