Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA当属性等于字符串时,调用对象数组methode的最佳方法是什么?_Java_String_Linq - Fatal编程技术网

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

JAVA当属性等于字符串时,调用对象数组methode的最佳方法是什么?,java,string,linq,Java,String,Linq,如果我在java中有一个字符串表对象 Student [] student = new Student [10]; 让我们想象一下 student[0].setName("TOMATO"); student[1].setName("POTATO"); student[2].setName("APPLE"); 如何从对象调用methode,但属性名称相同 如果我们使用Linq,这将类似于: for(int i=0 ; i<student.lenght; i++) sutent[i].m

如果我在java中有一个字符串表对象

Student [] student = new Student [10];
让我们想象一下

student[0].setName("TOMATO");
student[1].setName("POTATO"); 
student[2].setName("APPLE");
如何从对象调用methode,但属性名称相同

如果我们使用Linq,这将类似于:

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

for(int i=0;i您需要遍历
Student数组
以在数组中找到要调用该方法的特定Student对象

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
        }
    }
}

您需要遍历
学生数组
,以在数组中找到要调用该方法的特定学生对象

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
        }
    }
}

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

映射键是学生的名称,映射值是对应的学生对象

现在查找这个学生变成了一个O(1)操作,代价是占用更多内存


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

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

映射键是学生的名称,映射值是对应的学生对象

现在查找这个学生变成了一个O(1)操作,代价是占用更多内存

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

在Java 8+中:

Stream.of(student).filter(s -> s.getName.equals("POTATO"))
    .forEach(s -> /* whatever */);
在Java 8+中:

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

谢谢您的时间,但是没有办法避免循环?我已经更新了我的答案。您需要从数组中查看每个
学生项目
。这发生在线性时间,即
O(n)
其中
n
是学生数组的大小。感谢您的时间,但是没有办法避免循环?我已经更新了我的答案。您需要从数组中查看每个
学生项
。这发生在线性时间,即
O(n)
其中
n
是学生数组的大小。
如果按名称访问学生对象是您的主要用例,那么数组就是错误的数据结构。
恰到好处:)确实,您是100%正确的,但在我辅导学生时,我受到限制,数组必须用作数据结构。但是,由于我已经很久没有使用数组了,我想知道它们是否有一种像地图和链表这样的行为方式。。。正如你所解释的。但谢谢你指出这一点,事实并非如此。然后你必须使用数组和循环。
如果按名称访问学生对象是你的主要用例,那么数组就是错误的数据结构。
恰到好处:)的确,你是100%正确的,但在我辅导学生时,我受到限制,数组必须用作数据结构。但是,由于我已经很久没有使用数组了,我想知道它们是否有一种像地图和链表这样的行为方式。。。正如你所解释的。但谢谢你指出这一点,事实并非如此。然后你必须使用数组和循环。提示:你可以根据名称对数组进行排序。然后,您可以使用二进制搜索来避免以后对数组进行完全扫描。您抱怨接受的答案中有一个循环,但在LINQ示例中显示了一个循环(顺便说一句,这不太正确)。如果您使用的是Java8,我相信您应该能够使用forEach和lambda接近LINQ—类似于
Arrays.stream(student).filter(x->x.getName().equals(“土豆”).forEach(s->s.myMethode())一个提示:您可以根据名称对数组进行排序。然后,您可以使用二进制搜索来避免以后对数组进行完全扫描。您抱怨接受的答案中有一个循环,但在LINQ示例中显示了一个循环(顺便说一句,这不太正确)。如果您使用的是Java8,我相信您应该能够使用forEach和lambda接近LINQ—类似于
Arrays.stream(student).filter(x->x.getName().equals(“土豆”).forEach(s->s.myMethode())