Java 从一个特定元素中查找所有值

Java 从一个特定元素中查找所有值,java,Java,我有一个动物列表和一些关于它们的信息,如果我希望用户能够通过键入动物的名称来查找动物及其信息,我该怎么办?我已将动物储存在如下列表中: List<Animal> an = new ArrayList<Animal>(); Animal a4 = new Animal(); a4.add("Tiffany", 10, "Giraffe", "Grass"); a4.add("Mayo", 30,

我有一个动物列表和一些关于它们的信息,如果我希望用户能够通过键入动物的名称来查找动物及其信息,我该怎么办?我已将动物储存在如下列表中:

List<Animal> an = new ArrayList<Animal>();
Animal a4 = new Animal();
a4.add("Tiffany", 10, "Giraffe", "Grass");
a4.add("Mayo", 30, "Elephant", "Water");
a4.add("Simba", 30, "Turtle", "Leaves");
public class Animal {
    String name;
    int age;
    String breed;
    String eats;

   // getters, setters, constructor with fields

}
List an=new ArrayList();
动物a4=新动物();
a4.添加(“Tiffany”,10,“长颈鹿”,“草”);
添加(“梅奥”、30、“大象”、“水”);
添加(“辛巴”,30,“海龟”,“树叶”);

我假设你有一个
动物类
如下:

List<Animal> an = new ArrayList<Animal>();
Animal a4 = new Animal();
a4.add("Tiffany", 10, "Giraffe", "Grass");
a4.add("Mayo", 30, "Elephant", "Water");
a4.add("Simba", 30, "Turtle", "Leaves");
public class Animal {
    String name;
    int age;
    String breed;
    String eats;

   // getters, setters, constructor with fields

}
使用Java 8:

List<Animal> an = new ArrayList<Animal>();
an.add(new Animal("Tiffany", 10, "Giraffe", "Grass"));
an.add(new Animal("Mayo", 30, "Elephant", "Water"));
an.add(new Animal("Simba", 30, "Turtle", "Leaves"));

// String name = "Mayo"; // commented to get the user input with Scanner
Scanner scan = new Scanner(System.in);
System.out.println("Enter the animal's name, please...");
String name = scan.nextLine();

Optional<Animal> foundAnimal = an.stream().filter(animal -> animal.getName().equals(name)).findFirst();

if (foundAnimal.isPresent()) { // if the animal is in the list
    System.out.println("Animals name: " + foundAnimal.get().getName() + "\n" + "Animals age: "
            + foundAnimal.get().getAge());
}
输出:

Animals name: Mayo
Animals age: 30

我假设你有一个
动物
类,如下所示:

List<Animal> an = new ArrayList<Animal>();
Animal a4 = new Animal();
a4.add("Tiffany", 10, "Giraffe", "Grass");
a4.add("Mayo", 30, "Elephant", "Water");
a4.add("Simba", 30, "Turtle", "Leaves");
public class Animal {
    String name;
    int age;
    String breed;
    String eats;

   // getters, setters, constructor with fields

}
使用Java 8:

List<Animal> an = new ArrayList<Animal>();
an.add(new Animal("Tiffany", 10, "Giraffe", "Grass"));
an.add(new Animal("Mayo", 30, "Elephant", "Water"));
an.add(new Animal("Simba", 30, "Turtle", "Leaves"));

// String name = "Mayo"; // commented to get the user input with Scanner
Scanner scan = new Scanner(System.in);
System.out.println("Enter the animal's name, please...");
String name = scan.nextLine();

Optional<Animal> foundAnimal = an.stream().filter(animal -> animal.getName().equals(name)).findFirst();

if (foundAnimal.isPresent()) { // if the animal is in the list
    System.out.println("Animals name: " + foundAnimal.get().getName() + "\n" + "Animals age: "
            + foundAnimal.get().getAge());
}
输出:

Animals name: Mayo
Animals age: 30
使用地图

Map<String,Animal> animalsMap=new HashMap<String,Animal>();
animalsMap.put("Tiffany",new Animal("Tiffany", 10, "Giraffe", "Grass"));
animalsMap.put("Tiffany",new Animal("Mayo", 30, "Elephant", "Water"));
animalsMap.put("Simba",new Animal("Simba", 30, "Turtle", "Leaves"));
使用地图

Map<String,Animal> animalsMap=new HashMap<String,Animal>();
animalsMap.put("Tiffany",new Animal("Tiffany", 10, "Giraffe", "Grass"));
animalsMap.put("Tiffany",new Animal("Mayo", 30, "Elephant", "Water"));
animalsMap.put("Simba",new Animal("Simba", 30, "Turtle", "Leaves"));

你的逻辑有问题。您已经创建了一个ArrayList,它将存储动物类对象,因此,您需要使用.add(new Animal(parameters/details))并在稍后对其进行迭代。请使用以下代码作为参考-

import java.util.ArrayList;
import java.util.List;

public class Animal {

    private String name;
    private int num;
    private String type;
    private String food;

    public Animal(String name, int num, String type, String food) {
        super();
        this.name = name;
        this.num = num;
        this.type = type;
        this.liveon = food;
    }
    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Animal [name=" + name + ", num=" + num + ", type=" + type + ", 
                        food=" + food + "]";
    }

    public static void main(String [] args) {
        List<Animal> an = new ArrayList<Animal>();
        
        // Add Address objects to the ArrayList
        an.add(new Animal("Tiffany", 10, "Giraffe", "Grass"));
        an.add(new Animal("Mayo", 30, "Elephant", "Water"));
        an.add(new Animal("Simba", 30, "Turtle", "Leaves"));

        // Iterate over the ArrayList
        for(Animal a:an){
            if(a.getName() == "Simba"){
                System.out.println(a.toString());
            }
        }
    
    }
}
import java.util.ArrayList;
导入java.util.List;
公营动物{
私有字符串名称;
私有整数;
私有字符串类型;
私人串食;
公共动物(字符串名称、整数、字符串类型、字符串食物){
超级();
this.name=名称;
this.num=num;
this.type=type;
liveon=食物;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串toString(){
返回“Animal[name=“+name+”,num=“+num+”,type=“+type+”,
食品=“+食品+”];
}
公共静态void main(字符串[]args){
List an=new ArrayList();
//将地址对象添加到ArrayList
增加(新动物(“蒂芙尼”,10,“长颈鹿”,“草”);
增加(新动物(“梅奥”,30,“大象”,“水”);
加入(新动物(“辛巴”,30,“海龟”,“树叶”);
//在ArrayList上迭代
用于(动物a:an){
如果(a.getName()=“Simba”){
System.out.println(a.toString());
}
}
}
}

您的逻辑有问题。您已经创建了一个ArrayList,它将存储动物类对象,因此,您需要使用.add(new Animal(parameters/details))并在稍后对其进行迭代。请使用以下代码作为参考-

import java.util.ArrayList;
import java.util.List;

public class Animal {

    private String name;
    private int num;
    private String type;
    private String food;

    public Animal(String name, int num, String type, String food) {
        super();
        this.name = name;
        this.num = num;
        this.type = type;
        this.liveon = food;
    }
    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Animal [name=" + name + ", num=" + num + ", type=" + type + ", 
                        food=" + food + "]";
    }

    public static void main(String [] args) {
        List<Animal> an = new ArrayList<Animal>();
        
        // Add Address objects to the ArrayList
        an.add(new Animal("Tiffany", 10, "Giraffe", "Grass"));
        an.add(new Animal("Mayo", 30, "Elephant", "Water"));
        an.add(new Animal("Simba", 30, "Turtle", "Leaves"));

        // Iterate over the ArrayList
        for(Animal a:an){
            if(a.getName() == "Simba"){
                System.out.println(a.toString());
            }
        }
    
    }
}
import java.util.ArrayList;
导入java.util.List;
公营动物{
私有字符串名称;
私有整数;
私有字符串类型;
私人串食;
公共动物(字符串名称、整数、字符串类型、字符串食物){
超级();
this.name=名称;
this.num=num;
this.type=type;
liveon=食物;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串toString(){
返回“Animal[name=“+name+”,num=“+num+”,type=“+type+”,
食品=“+食品+”];
}
公共静态void main(字符串[]args){
List an=new ArrayList();
//将地址对象添加到ArrayList
增加(新动物(“蒂芙尼”,10,“长颈鹿”,“草”);
增加(新动物(“梅奥”,30,“大象”,“水”);
加入(新动物(“辛巴”,30,“海龟”,“树叶”);
//在ArrayList上迭代
用于(动物a:an){
如果(a.getName()=“Simba”){
System.out.println(a.toString());
}
}
}
}


请提供更多的上下文,并显示您迄今为止编写的所有代码。对于这种情况,如果您希望用户能够通过动物的名称获取动物,您可能需要使用一个而不是
列表
一个.stream().findFirst(a->a.name.equals(inputData)).get()@GreenCoveGuy起初,我实际上使用了一个地图(虽然不太熟悉),但我只能得到要打印的名称和第二个值。如果您有一个键和多个键,则不确定它是如何工作的values@Barrenr然后,对
值的类型要更具创造性。要么让键为
字符串
,值为
动物
,要么如果需要多个同名的
动物
对象,然后让值始终为
List
,包含所有具有该名称的
Animal
对象。请提供更多上下文并显示您迄今为止编写的任何代码。对于类似的情况,您希望用户能够通过名称获取动物,您可能希望使用一个而不是
列表
一个.stream().findFirst(a->a.name.equals(inputData)).get()@GreenCoveGuy起初,我实际上使用了一个地图(虽然不太熟悉),但我只能得到要打印的名称和第二个值。如果您有一个键和多个键,则不确定它是如何工作的values@Barrenr然后,对
值的类型要更具创造性。要么让键为
字符串
,值为
动物
,要么如果需要多个同名的
动物
对象,那么让值始终为
列表
,包含所有同名的
动物
对象。如果用户选择了动物,您将如何执行for each循环?简单地用用户输入替换“辛巴”是行不通的。你到底想搜索什么?如果用户选择了动物,你会如何执行for each循环?简单地用用户输入替换“simba”是行不通的。您到底想搜索什么?如何使用用户输入而不是字符串name=“mayo”?因此,如果用户类型为“Mayo”,则Mayo的信息将显示编辑由您决定,我将使用扫描仪获取用户输入。@Baller我进行了快速更新以获取用户输入……您如何获取用户输入而不是string name=“Mayo”?因此,如果用户类型为“Mayo”,则Mayo的信息将显示编辑由您决定,我将使用扫描仪获取用户输入。@Baller我进行了快速更新以获取用户输入。。。