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

如何通过属性在ArrayList中查找对象

如何通过属性在ArrayList中查找对象

函数式编程 2019-09-24 15:08:16
我如何Carnet在ArrayList<Carnet>知道对象属性的情况下找到它codeIsin。List<Carnet> listCarnet = carnetEJB.findAll();public class Carnet {    private String codeTitre;    private String nomTitre;    private String codeIsin;    // Setters and getters}
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您不能没有迭代。


选项1


Carnet findCarnet(String codeIsIn) {

    for(Carnet carnet : listCarnet) {

        if(carnet.getCodeIsIn().equals(codeIsIn)) {

            return carnet;

        }

    }

    return null;

}

选项2


覆盖的equals()方法Carnet。


选项3


而是将您的存储List为密钥:MapcodeIsIn


HashMap<String, Carnet> carnets = new HashMap<>();

// setting map

Carnet carnet = carnets.get(codeIsIn);


查看完整回答
反对 回复 2019-09-24
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

在Java8中,您可以使用流:


public static Carnet findByCodeIsIn(Collection<Carnet> listCarnet, String codeIsIn) {

    return listCarnet.stream().filter(carnet -> codeIsIn.equals(carnet.getCodeIsin())).findFirst().orElse(null);

}

另外,如果您有许多不同的对象(不仅是Carnet),或者想通过不同的属性(不仅是通过cideIsin)找到它,则可以构建一个实用程序类,以将其逻辑封装在其中:


public final class FindUtils {

    public static <T> T findByProperty(Collection<T> col, Predicate<T> filter) {

        return col.stream().filter(filter).findFirst().orElse(null);

    }

}


public final class CarnetUtils {

    public static Carnet findByCodeTitre(Collection<Carnet> listCarnet, String codeTitre) {

        return FindUtils.findByProperty(listCarnet, carnet -> codeTitre.equals(carnet.getCodeTitre()));

    }


    public static Carnet findByNomTitre(Collection<Carnet> listCarnet, String nomTitre) {

        return FindUtils.findByProperty(listCarnet, carnet -> nomTitre.equals(carnet.getNomTitre()));

    }


    public static Carnet findByCodeIsIn(Collection<Carnet> listCarnet, String codeIsin) {

        return FindUtils.findByProperty(listCarnet, carnet -> codeIsin.equals(carnet.getCodeIsin()));

    }

}


查看完整回答
反对 回复 2019-09-24
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

如果使用Java 8,并且搜索有可能返回null,则可以尝试使用 Optional类。


要查找证章:


private final Optional<Carnet> findCarnet(Collection<Carnet> yourList, String codeIsin){

    // This stream will simply return any carnet that matches the filter. It will be wrapped in a Optional object.

    // If no carnets are matched, an "Optional.empty" item will be returned

    return yourList.stream().filter(c -> c.getCodeIsin().equals(codeIsin)).findAny();

}

现在,它的用法是:


public void yourMethod(String codeIsin){

    List<Carnet> listCarnet = carnetEJB.findAll();


    Optional<Carnet> carnetFound = findCarnet(listCarnet, codeIsin);


    if(carnetFound.isPresent()){

        // You use this ".get()" method to actually get your carnet from the Optional object

        doSomething(carnetFound.get());

    }

    else{

        doSomethingElse();

    }

}


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 1798 浏览

添加回答

举报

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