Java 如何从bean类型数组列表中获取元素的索引

Java 如何从bean类型数组列表中获取元素的索引,java,arrays,list,for-loop,arraylist,Java,Arrays,List,For Loop,Arraylist,我想从ArrayList中获取名字的索引 这是我的bean类 public class BeanClass { static String firstname; String lastname; int rollno; public BeanClass(String firstname, String lastname, int rollno) { super(); this.firstname = firstname; this.lastname = lastname

我想从ArrayList中获取名字的索引

这是我的bean类

public class BeanClass {
static String firstname;
String lastname;
int rollno;

public BeanClass(String firstname, String lastname, int rollno) {
    super();
    this.firstname = firstname;
    this.lastname = lastname;
    this.rollno = rollno;
}
这里是主要活动

public class MainClass {

    static ArrayList<BeanClass>arraylist=new ArrayList<>();
    static String firstname[]={"kshitij","ravi","prakash","sunil"};
    staticString lastname[]={"singh","sharma","verma","tiwari"};
    staticint rollno[]={1,2,3,4};

    public static void main(String[] args) {

        for (int i = 0; i < firstname.length; i++) {
            BeanClass bean=new BeanClass(firstname[i],lastname[i],rollno[i]);
            arraylist.add(bean);
        }
         System.out.println(arraylist.indexOf("kshitij"));
    }
}
public类MainClass{
静态ArrayList=新ArrayList();
静态字符串firstname[]={“kshitij”、“ravi”、“prakash”、“sunil”};
staticString lastname[]={“singh”、“sharma”、“verma”、“tiwari”};
staticint rollno[]={1,2,3,4};
公共静态void main(字符串[]args){
for(int i=0;i
请注意,
ArrayList
包含
BeanClass
。它的值不是
“kshitij”
,而是
BeanClass的变量之一

您必须声明一个
索引
变量,循环
数组列表
,然后找到您的
索引

int index = 0; // Index variable
for (BeanClass bean: arraylist) {
    if (bean.firstname.equals("kshitij")) {
        System.out.println(index);
        break;
    } 
    index++;
}
输出:

1
顺便说一句,在
BeanClass
中,变量
firstname
不应该是
静态的
,否则所有实例都将具有
firstname
相同的名称,然后按firstname搜索它会丢失一个sence

因此,重新定义您的
BeanClass

public class BeanClass {
   String firstname;
   String lastname;
   int rollno;

   // ...
}

请注意,
ArrayList
包含
BeanClass
。它的值不是
“kshitij”
,而是
BeanClass的变量之一

您必须声明一个
索引
变量,循环
数组列表
,然后找到您的
索引

int index = 0; // Index variable
for (BeanClass bean: arraylist) {
    if (bean.firstname.equals("kshitij")) {
        System.out.println(index);
        break;
    } 
    index++;
}
输出:

1
顺便说一句,在
BeanClass
中,变量
firstname
不应该是
静态的
,否则所有实例都将具有
firstname
相同的名称,然后按firstname搜索它会丢失一个sence

因此,重新定义您的
BeanClass

public class BeanClass {
   String firstname;
   String lastname;
   int rollno;

   // ...
}
如本文所述:

您应该构建自己的
equals
方法,以便能够使用
indexOf
。 此外,还需要将
BeanClass
的对象传递给
indexOf

public boolean equals(Object o) {
    if(!(o instanceof BeanClass)) return false;
    BeanClass other = (BeanClass) o;
    return (this.firstname == other.firstname && this.lastname == other.lastname );
}
如本文所述:

您应该构建自己的
equals
方法,以便能够使用
indexOf
。 此外,还需要将
BeanClass
的对象传递给
indexOf

public boolean equals(Object o) {
    if(!(o instanceof BeanClass)) return false;
    BeanClass other = (BeanClass) o;
    return (this.firstname == other.firstname && this.lastname == other.lastname );
}

如果要获取以下名称的索引,则需要声明一个变量

int index=0

并替换此行
System.out.println(arraylist.indexOf(“kshitij”)使用此代码

for (BeanClass bean: arraylist) {
    if (bean.firstname.equals("kshitij")) {           
        System.out.println("Index is " + index);
        break;
    }
    index++
}

它存储您的名字的返回索引。我假设索引从0开始,如果您想得到以下名称的索引,您需要声明一个变量

int index=0

并替换此行
System.out.println(arraylist.indexOf(“kshitij”)使用此代码

for (BeanClass bean: arraylist) {
    if (bean.firstname.equals("kshitij")) {           
        System.out.println("Index is " + index);
        break;
    }
    index++
}

它存储您的名字的返回索引。我假设索引从0开始,您可以在Java 8中使用
IntStream
,如下所示:

IntStream.range(0, list.size())
    .filter(i -> arrayList.get(i).firstname.equals("kshiij"))
    .findFirst()
    .getAsInt();

请记住,
getAsInt
如果列表中不包含匹配的元素,则抛出一个
NoTouchElementException
。不要忘记捕捉它。

您可以在Java 8中使用
IntStream
,如下所示:

IntStream.range(0, list.size())
    .filter(i -> arrayList.get(i).firstname.equals("kshiij"))
    .findFirst()
    .getAsInt();

请记住,
getAsInt
如果列表中不包含匹配的元素,则抛出一个
NoTouchElementException
。不要忘记捕获它。

要按您想要的方式执行,ArrayList应该使用字符串作为泛型参数。您必须构建自己的函数来迭代列表,并逐个对象检查firstname是否是作为参数传递的函数。若要按照您希望的方式执行此操作,ArrayList应将字符串作为泛型参数。您必须构建自己的函数来迭代列表,如果firstname是作为参数传递的,则逐个对象检查。找到匹配项后,您需要中断,无需再循环。谢谢你的提示。另外,OP正在寻找索引,而不是值。当你找到匹配项时,你需要中断,不需要再循环。感谢您的提示。此外,OP正在查找索引,而不是值。当您找到匹配项时,您需要断开。是的,我们可以断开,但当条件为真时,它是打印索引。否则,我们可以跳过打印它。
是的,我们可以断开,但当条件为真时,它是打印索引。否则,我们将跳过打印它。
,你的语句没有任何意义。只有当它的条件为true(bean.firstname.equals(“kshitij”))时,它的get索引才有效。否则它不是打印索引。你需要中断,当您找到匹配项是的,我们可以中断,但当条件为真时它是打印索引,否则是跳过打印它
是的,我们可以中断,但当条件为真时它是打印索引,否则是跳过打印它
,您的语句没有任何意义..只有当条件为真时它的get索引(bean.firstname.equals(“kshitij”))否则它不是打印索引