亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過屬性在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 關注
  • 1830 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號