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

时间:2015-08-20 03:31:57

标签: java printing hashmap

我试图修复这段代码,我从具有板号和所有者列表(格式)的哈希映射打印。我试图通过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));            
        }
    }
}

1 个答案:

答案 0 :(得分:4)

要删除重复项,请使用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);
}