为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过Java列表中的属性获取对象的索引

如何通过Java列表中的属性获取对象的索引

慕仙森 2022-06-04 15:48:24
我想通过Java中的属性获取列表中对象的索引。例子:List<MyObj> list = new ArrayList<>();list.add(new MyObj("Ram");list.add(new MyObj("Girish");list.add(new MyObj("Ajith");list.add(new MyObj("Sai");  public class MyObj {public String name;    public MyObj(String name){        this.name=name;    }}现在,我想获取包含名称为“Girish”的对象的索引。请让我知道 JAVA 中的代码。
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

如果您想要一个带有流的解决方案,请使用这个:

int index = IntStream.range(0, list.size())
     .filter(i -> list.get(i).name.equals(searchName))
     .findFirst()
     .orElse(-1);


查看完整回答
反对 回复 2022-06-04
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

如果您有List,您所能做的就是遍历每个元素并检查所需的属性。这是O(n)。


public static int getIndexOf(List<MyObj> list, String name) {

    int pos = 0;


    for(MyObj myObj : list) {

        if(name.equalsIgnoreCase(myObj.name))

            return pos;

        pos++;

    }


    return -1;

}

如果您想提高性能。然后你可以实现你自己的数据结构。请注意,关键特性是您的 key 属性应该是 a 的 key,HashMap而 valueHashMap应该是 index。然后你会得到O(1)的性能。


public static final class IndexList<E> extends AbstractList<E> {

    private final Map<Integer, E> indexObj = new HashMap<>();

    private final Map<String, Integer> keyIndex = new HashMap<>();

    private final Function<E, String> getKey;


    public IndexList(Function<E, String> getKey) {

        this.getKey = getKey;

    }


    public int getIndexByKey(String key) {

        return keyIndex.get(key);

    }


    @Override

    public int size() {

        return keyIndex.size();

    }


    @Override

    public boolean add(E e) {

        String key = getKey.apply(e);


        if (keyIndex.containsKey(key))

            throw new IllegalArgumentException("Key '" + key + "' duplication");


        int index = size();

        keyIndex.put(key, index);

        indexObj.put(index, e);

        return true;

    }


    @Override

    public E get(int index) {

        return indexObj.get(index);

    }

}

演示:


IndexList<MyObj> list = new IndexList<>(myObj -> myObj.name);

list.add(new MyObj("Ram"));

list.add(new MyObj("Girish"));

list.add(new MyObj("Ajith"));

list.add(new MyObj("Sai"));

System.out.println(list.getIndexByKey("Ajith"));    // 2


查看完整回答
反对 回复 2022-06-04
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

如果您更改 .equals 函数,indexOf() 将起作用


我建议只是迭代


int getIndex(String wanted){

  for(int i = 0; i<list.size(); i++){

    if(list.get(i).name.equals(wanted)){

      return i;

    }

  }

}


查看完整回答
反对 回复 2022-06-04
  • 3 回答
  • 0 关注
  • 552 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信