当前位置: 首页 > 面试题库 >

如何在不打印重复项的情况下从HashMap打印值?

谢英耀
2023-03-14
问题内容

我正在尝试修复这段代码,该代码是从具有车牌号和车主列表(该格式)的哈希图进行打印的。我试图通过printOwners()仅打印出所有者;但是我不能不打印重复的东西。

我已经玩了一段时间,但似乎无法跳过重复项。

这是我的代码:

import java.util.ArrayList;
import java.util.HashMap;

public class VehicleRegister {

    private HashMap<RegistrationPlate, String> owners;

    public VehicleRegister() {
        owners = new HashMap<RegistrationPlate, String>();
    }

    public boolean add(RegistrationPlate plate, String owner) {
        //search for existing plate
        if (!(owners.containsKey(plate))) { // add if no plate
            owners.put(plate, owner);
            return true;
        }

        //if plate is found, check for owner
        else if (owners.keySet().equals(owner)) {
           return false;
        }

        return false;
    }

    public String get(RegistrationPlate plate) {
        return owners.get(plate);
    }

    public boolean delete(RegistrationPlate plate) {
        if (owners.containsKey(plate)) {
            owners.remove(plate);
            return true;
        }

        return false; 
    }

    public void printRegistrationPlates() {
        for (RegistrationPlate item : owners.keySet()) {
            System.out.println(item);
        }
    }

    public void printOwners() {

        for (RegistrationPlate item : owners.keySet()) {
            System.out.println(owners.get(item));            
        }
    }
}

问题答案:

要删除重复项,请使用HashSet<String>

public void printOwners() {
    for (String s : new HashSet<>(owners.values())) {
        System.out.println(s);            
    }
}

或者使用Java 8 Streamdistinct()方法:

public void printOwners() {
    owners.values().stream().distinct().forEach(System.out::println);
}


 类似资料:
  • 我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。 这是我拥有的当前代码: 当前代码将重复项两次添加到列表中,但它也将每个键添加一次。 谢谢。

  • 问题内容: 我从plist中的字典中加载了一个值,但是当我将其打印到控制台时,它会打印:Optional(Monday Title),而不仅仅是“ Monday Title”。 如何在打印时摆脱值的Optional()? 问题答案: 摆脱的一种方法是使用感叹号: 但是,只有在确定存在该值的情况下,才应这样做。另一种方法是解包和使用条件,例如: 将该程序粘贴到runswiftlang中进行演示:

  • 问题内容: 我正在为具有内置行式打印机的Android设备开发应用程序。我必须与此打印机进行交互,并使用它来打印收据上的详细信息,然后使用裁纸器自动剪切该收据。我已经在其中看到了一些ESC命令,但是我不知道如何执行这些ESC命令。 关于Casio设备打印机,我有三个主要问题: 1.我已经使用了内置打印机的打印代码,但是打印后切纸刀没有激活 2.我不知道如何在android中将ESC命令发送到打印机

  • 我一直在做一个倒计时程序,我想到了这个。 在最后的while循环中,如果里面没有print/println语句,倒计时代码就不会执行。为什么?不过,该程序与print语句配合得非常好。

  • 嘿,我想打印出飞机存储。飞机存储包含字符串和航班的哈希图。这就是flight.add/print进入主端的地方。但我现在希望航空公司和航班并行打印,所以我把航空公司商店和我试图打印出PlaneStore以及航空公司,但我得到的只是一个内存地址,有人能帮我吗?

  • 问题内容: 我有一个: 现在,我想遍历所有值并打印它们。 我这样写: 它似乎不起作用。 问题是什么? 编辑:另一个问题:这个集合是从零开始的吗?我的意思是,如果它具有1个键并且值将为0或1? 问题答案: keySet()仅从哈希图中返回一组键,您应该迭代此键集并使用这些键从哈希图中获取值。 在您的示例中,哈希映射键的类型为,但是您在通用的for循环中指定了密钥,因此无法对其进行编译。您应该将其更改