JAVA调用对象数组方法的最佳方法是什么,其中属性等于字符串?

时间:2017-05-07 04:39:37

标签: java string linq

如果我在java中有一个String表对象

Student [] student = new Student [10];

让我们想象

student[0].setName("TOMATO");
student[1].setName("POTATO"); 
student[2].setName("APPLE");

如何从对象调用方法,但属性名称等于马铃薯?

如果我们使用Linq,那将是:

for(int i=0 ; i<student.lenght; i++)
sutent[i].myMethode().where(sutent[i].getName().equal("POTATO"));

但是如何在JAVA中做到这一点?

我尝试使用 indexOf(String str),但它似乎给了我奇怪的结果

谢谢

3 个答案:

答案 0 :(得分:3)

您需要遍历Student array以查找要在其中调用方法的数组中的特定学生对象。

class Student{
    private String name;

    Student(){
        name = ""; // initialization
    }

    String getName(){
        return name;
    }

    void setName(String n){
        name = n;
    }

    void somemethod(){ // or any other return type and parameters
        ...
    }
}

public class Main{
    Student[] student = new Student[10];
    student[0] = new Student();
    student[1] = new Student();
    ...
    student[0].setName("TOMATO");
    student[1].setName("POTATO"); 
    ...
    for(Student s : student) {
        if(s != null && s.getName.equal("POTATO")) {
            s.somemethod();// call on s
        }
    }
}

答案 1 :(得分:3)

典型的Java答案是:您将考虑使用Map而不是数组。

地图键是学生的名字,地图值是相应的学生对象。

现在查看该学生将以更多内存为代价成为O(1)操作。

换句话说:如果按名称访问学生对象是您的主要用例,那么数组是错误的数据结构。

答案 2 :(得分:3)

在Java 8 +中:

Stream.of(student).filter(s -> s.getName.equals("POTATO"))
    .forEach(s -> /* whatever */);