Как добавить элемент в список внутри другого списка?

#java #list

#java #Список

Вопрос:

У меня есть класс с именем Utilizador, созданный со следующими атрибутами:

 private String nome;
private String email;
private String cidadeAtual;
private List<String> checkins = new ArrayList<String>();
private List<String> amigos = new ArrayList<String>();
  

В моем основном классе у меня есть список утилит с форматом followinf:

 Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: []
Nickname: Maria | Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: []
  

То, что я пытаюсь сделать, это ввести одно имя, а затем другое и добавить дружбу. Например:

Я набираю Daniel, нажимаю enter. Я набираю Марию, нажимаю ввод. Список друзей теперь должен иметь имена друг друга, подобные этому:

 Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: [Maria]
Nickname: Maria | Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: [Daniel]
  

Но разработанный мной метод помещает оба имени в список Amigos следующим образом:

 Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: [Maria, Daniel]
Nickname: Maria| Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: [Maria, Daniel]
  

Вот метод:

 public static void adicionarAmizade() {
    Scanner cu = new Scanner(System.in);
    System.out.println("Introduza o nome dos utilizadores!");
    System.out.println("n1º:");
    String amigo1 = cu.next();
    System.out.println("n2º:");
    String amigo2 = cu.next();

    for (Utilizador u : listaUtilizadores) {
        if ((u.getNome()).equals(amigo1)) {
            u.getAmigos().add(amigo2);
            System.out.println("Adicionou");
            System.out.println(u.toString());
            break;
        }
    }

    for (Utilizador u : listaUtilizadores) {
        if ((u.getNome()).equals(amigo2)) {
            u.getAmigos().add(amigo1);
            System.out.println("Adicionou");
            System.out.println(u.toString());
            break;
        }
    }
}
  

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

1. Возможно ли по какой-то причине, что оба Utilizador amigos списка являются одним и тем же экземпляром списка?

2. И я знаю, что это означает больше работы с вашей стороны, но в целом: это англоязычный сайт. Таким образом, шансы получить лучшие ответы возрастают, когда ваш исходный код также говорит по-английски. Для меня сейчас контекст отсутствует. Я не понимаю, как ваши два списка, упомянутые выше, и большая часть исходного кода объединяются.

3. Я предлагаю вам узнать о HashMap. docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Ответ №1:

Что-то вроде этого — это начало.

 HashMap<String, String> Amigos = new HashMap<>();

//Create Friendship between Marian and Daniel.
Amigos.put("Maria", "Daniel");

//Get Maria's Friend.
System.out.println(Amigos.get("Maria"))
  

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

1. Этот ответ не является безопасным для типов

2. Спасибо! Вы могли бы отредактировать ответ, чтобы улучшить его.

Ответ №2:

Вы также можете использовать объектный подход.

Объект Person

 import java.util.ArrayList;


public class Person {
    String name;
    ArrayList<String> friends = new ArrayList();

    Person(String name)
    {
        this.name = name;
    }

    String getName()
    {
        return this.name;
    }

    void addFriend(String friendName)
    {
        friends.add(friendName);
    }

    boolean isFriend(String friendName)
    {
        for(String friend : this.friends)
        {
            if(friend.equals(friendName))
            {
                return true;
            }
        }
        return false;
    }

    String getFriendInPosition(int position)
    {
        return this.friends.get(position);
    }

    int getFriendPosition(String friendName)
    {
        int i = 0;
        for(String friend : this.friends)
        {
            if(friend.equals(friendName))
            {
                return i;
            }
            i  ;
        }
        return -1;
    }

    ArrayList<String> getAllFriends()
    {
        return this.friends;
    }
}
  

Основной класс

 public static void main(String[] args) {       

  Person maria = new Person("Maria");
  Person daniel = new Person("Daniel");

  maria.addFriend(daniel.getName());
  daniel.addFriend("Maria");//You could create this to add Person objects as friends

  maria.addFriend("me");//You could create this to add Person objects as friends
  maria.addFriend("you");//You could create this to add Person objects as friends

  System.out.println(maria.getFriendInPosition(0));

  System.out.print("Are Maria and Daniel friends? ");
  System.out.println(maria.isFriend(daniel.getName()));

  for(String friend : maria.getAllFriends())
  {
      System.out.println("Maria's friend: "   friend);
  }

  for(String friend : daniel.getAllFriends())
  {
      System.out.println("Daniel's friend: "   friend);
  }
}