簡體   English   中英

基於價值觀拆分Arraylist的最佳方法是什么?

[英]What is the best approach to split an Arraylist based on their values

我想拆分一個我正在循環的ArrayList ,並設置一個名為active的字段,可以是truefalse 但是在循環結束時,我想將這個集合分成兩組.active active = falseactive = true ,所以這樣做我不需要在數據庫中搜索兩次。

例如:

    private List<Classes> searchClasses(ClassItems listItems) {

    List<ClassItem> items = new ArrayList<ClassItem>();

    for (Iterator<ClassItem> iterator = listItems.getItems().iterator(); iterator.hasNext();) {
        ClassItems item = iterator.next();
        ClassEntityManager classEnt = ClassEntityManager.search(item.getId);

        if(classEnt.active()){
            item.setActive(true);
            items.add(item);
        }
    }
    return items;
}

這樣做的最佳方法是什么?

制作兩個列表而不是一個。

if(classEnt.active()) {
    activeItems.add(item);
    item.setActive(true);
} else {
    inactiveItems.add(item);
}

使用兩個集合,一個用於活動,另一個用於非活動。

從數據庫中獲取數據時,只需將CalssItem放在正確的列表中:

private List<ClassItem> searchClasses(ClassItems listItems) {

    List<ClassItem> activeItems= new ArrayList<ClassItem>();
    List<ClassItem> notActiveItems= new ArrayList<ClassItem>();

    Iterator<ClassItem> i = listItems.getItems().iterator();
    while(i.hasNext()) { //This is a better approach.
        ClassEntityManager classEnt = ClassEntityManager.search(i.next().getId);

        if(classEnt.active()){
            item.setActive(true);
            activeItems.add(item);
        }else{
            item.setActive(false);
            notActiveItems.add(item);
        }
    }
    List<ClassItem> ret = new ArrayList<ClassItem>(activeItems);
    ret.addAll(notActiveItems);
    return ret;
}

但是,通過這種方式, activeItemsnotActiveItems都是activeItems notActiveItems的。 最好的辦法是方法之外設置一個循環來檢查ClassItem是否處於活動狀態。 這樣,可以從方法中刪除activeItemsnotActiveItems

private List<ClassItem> searchClasses(ClassItems listItems) {

    List<ClassItem> items= new ArrayList<ClassItem>();

    Iterator<ClassItem> i = listItems.getItems().iterator();
    while(i.hasNext()) { //This is a better approach.
        ClassEntityManager classEnt = ClassEntityManager.search(i.next().getId);

        item.setActive(classEnt.active());

        items.add(item);
    }

    return items;
}

並使用該列表:

List<ClassItem> items = searchClasses(classItems);
for(ClassItem item: items){
    if(item.isActive()){
        //do something
    }else{
        //do something else
    }
}

更好的是使用華麗而美觀的Java 8 Stream API:

List<ClassItem> active = items.stream().filter(x->x.isActive).collect(Collectors.toList());

List<ClassItem> notActive = items.stream().filter(x->!x.isActive).collect(Collectors.toList());

或者一個班輪:

List<ClassItem> active = searchClasses(classItems).stream().filter(x->x.isActive).collect(Collectors.toList());

注意

您的代碼的返回類型為List<Classes> ,而返回的值為List<ClassItem> 哪個是對的?

您的迭代器具有泛型類型的ClassItemnext()方法返回ClassItems對象。 哪個是對的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM