получение всех ключей, принадлежащих одному объекту, в хэш-карте

#java

#java

Вопрос:

Ниже приведен мой пользовательский класс. У меня также есть класс Card, который является родительским классом класса Single currency card и класса multi card currency.

Я довольно новичок в программировании, и у меня проблемы с пониманием некоторых концепций. Что мне нужно сделать, так это вернуть карты, принадлежащие пользователю, если имя пользователя и пароль совпадают. Это делается в методе getCards. После этого мне нужно добавить карточку в список Hashmap, если имя пользователя и пароль совпадают. Любые советы или другие сайты, которые действительно помогли бы, поскольку я много борюсь с концепцией HashMap.

 
public class User {
String username;
String password;
User user;

HashMap<String,Card> userHash = new HashMap <String, Card>(); //key is the cardID

public User(String username, String password)
{
    this.username = username;
    this.password = password;
}    

public String toString()
{
    return "User ---------"   "n"   "Username: "   username   "n"   "Password: "   password;
}

public String getUsername()
{
    return username;
}

public String getPassword()
{
    return password;
}

public boolean userValidate(String username, String password)
{
    if (username.contains(user.getUsername()) amp;amp; password.contains(user.getPassword()))
    {
        System.out.println("User accepted");
        return true;
    }else
        System.out.println("Access denied");
    return false;
}

public HashMap<String, Card> getCards(String username, String password)
{
    for(String value : userHash.keySet())
        if (user.userValidate(username, password) == true)
        {
            //return user's cards
            return true;
        }else
            return null; 
        return null;

}


public boolean addCard(Card card, String username, String password)
{
    if(user.userValidate(username, password) == true)
    {
        user.getCards(username, password);

    }
    return false;
}

The card which belongs to the user
 

Ответ №1:

Вот моя концепция дизайна.

В этом случае класс пользователя может иметь много карточек, и каждая карточка имеет идентификатор. Проверка проверки должна сохраняться каждый раз при создании пользователя.

Метод userValidate может проверять аргументы своими собственными значениями, а затем сохранять их в переменной isvalid(логическое значение).

 public boolean userValidate(String username, String password)
{
    if (username.contains(getUsername()) amp;amp; password.contains(getPassword()))
    {
        System.out.println("User accepted");
        return isvalid = true;
    }else
        System.out.println("Access denied");
    return isvalid = false;
}
 

Метод getCards прост, потому что он проверяет, является ли значение isvalid истинным или нет.

 public HashMap<String, Card> getCards() {
    if (isvalid) {
        // return user's cards
        return userHash;
    } else
        return null;

}
 

Метод addCard, я могу просто сохранить карточку с идентификатором карты, если проверка пользователя прошла успешно или ничего…

 public boolean addCard(Card card, String username, String password)
{
    if(userValidate(username, password))
    {
        userHash.put(card.getCardId(), card);
        return true;

    }
    return false;
}
 

Итак, соберитесь вместе со всеми этими кодами.

импортируйте java.util.Хэш — карта;

 class Card 
{
    private String cardId;

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

}

public class User {
    private String username;
    private String password;
    private boolean isvalid;


    HashMap<String, Card> userHash = new HashMap<String, Card>(); // key is the
                                                                    // cardID

    public User(String username, String password) {
        this.username = username;
        this.password = password;

    }


    public boolean userValidate(String username, String password)
    {
        if (username.contains(getUsername()) amp;amp; password.contains(getPassword()))
        {
            System.out.println("User accepted");
            return isvalid = true;
        }else
            System.out.println("Access denied");
        return isvalid = false;
    }

    public String toString() {
        return "User ---------"   "n"   "Username: "   username   "n"   "Password: "   password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public HashMap<String, Card> getCards() {
        if (isvalid) {
            // return user's cards
            return userHash;
        } else
            return null;

    }

    public boolean addCard(Card card, String username, String password)
    {
        if(userValidate(username, password))
        {
            userHash.put(card.getCardId(), card);
            return true;

        }
        return false;
    }


}
 

Ответ №2:

Вы можете выполнить итерацию по карте и добавить все карты в список:

 List<Card> list = new ArrayList();

for (Map.Entry<String, Card> entry : userHash.entrySet()) {
    if(entry.getKey().equals(username)) { list.add(entry.getValue(); }
}
 

Это то, что вы искали?

Или, если вы уже поняли потоки:

 userHash.entrySet().stream().filter(entry -> username.equals(entry.getValue())
                            .map(Entry::getKey)
                            .collect(toList());
 

Комментарии:

1. Наша потоковая версия userHash.entrySet().stream().filter(entry -> username.equals(entry.getValue()).map(Entry::getKey()).collect(toList());