2015-08-20 2 views
1

Я пытаюсь исправить этот фрагмент кода, где я печатаю из хэш-карты, имеющей список номеров и владельцев таблиц (этот формат). Я пытаюсь распечатать только владельцев с помощью printOwners(); но я не могу заставить его не печатать дубликаты.Как распечатать из списка HashMap, не печатая дубликатов?

Я играл с ним некоторое время, просто не могу пропустить дубликаты.

Вот мой код:

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

ответ

2

Для удаления дубликатов, используйте HashSet<String>:

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

В качестве альтернативы с Java 8 Stream и distinct() метод:

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

Извините, Я новенький. Это потому, что печать нового HashSet будет печатать только ключ, если это не дубликат? Можете ли вы объяснить, что, если хотите, я новичок в Java и просто изучаю хэш-материал. Кроме того, благодарю вас за ответ. Я смог отправить его архивариусу и отпечатать оттуда, но задавался вопросом, был ли более простой способ. – Ohlaph

+0

В Java структуры '' Set'' (которые '' HashSet' реализуют) не содержат дубликатов: если элемент добавлен несколько раз к набору, в нем фактически содержится только один элемент. Использование '' Set'' обычно является способом удаления дубликатов из другой коллекции, например '' List'', который может содержать один и тот же элемент несколько раз. –

+0

Отлично, спасибо !!! – Ohlaph

Смежные вопросы