Как я могу распечатать данные, сохраненные в LinkedHashMap

Это простой код для получения информации о человеке. Например, когда я наберу команду enter#runnan#male#23#Earth, данные будут сохранены в LinkedHashMap. Также, когда я набираю search # runnan, он будет искать данные в LinkedHashMap и находить имя runnan, а затем печатать всю информацию. Мне как-то удалось сохранить часть, но всякий раз, когда я пытаюсь выполнить поиск, он показывает только адрес файла данных.

import java.util.*;
public class PersonManage {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Map<String, Person> ps = new LinkedHashMap<String, Person>();
        ps.put("Runnan", new Person("Runnan","Male", 23, "Earth"));

    while(true){
        System.out.println("Person Manager > ");
        String in = scanner.nextLine();
        String[] arr = in.split("#");
        if(arr[0].equals("enter")){
            String name = arr[1];
            String gender = arr[2];
            int age = Integer.parseInt(arr[3]);
            String address = arr[4];
            ps.put(arr[1], new Person(arr[1],arr[2],age,arr[4]));
            System.out.println(arr[1]+"Saved");
            continue;
        }
        else if(arr[0].equals("search")){
            System.out.println(ps.get(arr[1]).toString());
            continue;
        }
        else if(arr[0].equals("exit")){
            break;
        }
        else {
            System.out.println("write in format of enter#name#gender#age#address");
            System.out.println("or search#searchingname");

        }

    }
}

Это переопределенный класс.

public class Person {

String name;
String gender;
int age;
String address;
public Person(String string, String string2, int i, String string3) {
    // TODO Auto-generated constructor stub
    this.name = string;
    this.gender = string2;
    this.age = i;
    this.address=string3;
}
public String toString(){
    String t = name+gender+age+address;
    return t;
}
}

Любая помощь будет благодарна мне и будет высоко оценена.

2 ответа

Решение

Я попробовал ваш код с этими входами:

enter#Jhon#Men#23#Moon
enter#Mongo#Men#101#Jupiter
enter#Paul#Men#23#Earth

Затем, когда я использовал поиск:

search#Paul

Я получил:

PaulMen23Earth

Может быть, вы можете редактировать свой toString() метод:

public String toString(){
    String t = "name: " + name+ ",\n" + "gender: " +  gender+ ",\n" + 
               "age: " + age + ",\n" + "address: " + address;
    return t;

Кроме того, вы должны добавить элемент управления, когда имя отсутствует в вашем списке:

else if(arr[0].equals("search")){
   if(ps.get(arr[1])!= null) {
       System.out.println(ps.get(arr[1]).toString());
       continue;
   }
   else {
        System.out.println("This name is not present. You can add it using \"enter\" command");
        }

Чтобы вывести все значения из карты в консоль, вы должны написать что-то вроде:

else if (arr[0].equals("listAll")) {
    for (Person person : ps.values()) {
        System.out.println( person );
    }
    continue;
}

Или более краткая версия с Java 8 Stream API функции:

else if (arr[0].equals("listAll")) {
    map.values().forEach(System.out::println);
    continue;
}
Другие вопросы по тегам