java - 循环迭代器直到它为空

标签 java iterator

我想从列表中获取所有对象并将它们放入 Map 中按创建日期分组,这意味着 map 是这样的:Map<String, List<MyObject>> . MyObject对象有一个存储其创建日期的字段。

我想过做一个嵌套的 while 循环,看起来像这样:

public Map<String, List<Expense>> getExpensesSorted(SortType type){
    Map<String, List<Expense>> map = new HashMap<String, List<Expense>>();

    List<Expense> expenses = getAllExpenses(budgetId).getExpenses()
            .getList();

    if (type.equals(SortType.DAY)) {
        Iterator<Expense> expIter = expenses.iterator();

        while (expIter.hasNext()) {
            List<Expense> list = new ArrayList<Expense>();
            Expense exp = (Expense) expIter.next();
            list.add(exp);

            String day = exp.getDate().format("YYYY-MM-DD");
            expIter.remove();

            while (expIter.hasNext()) {
                Expense exp2 = (Expense) expIter.next();
                if (exp2.getDate().format("YYYY-MM-DD").equals(day)) {
                    list.add(exp2);
                    expIter.remove();
                }
            }
            map.put(day, expenses);
        }

    } else if (type.equals(SortType.WEEK)) {
        ...
    } else if (type.equals(SortType.TYPE)) {
        ...
    } else if (type.equals(SortType.CATEGORY)) {
        ...
    }
    return map;
}

但这是错误的,它只获取所有与第一个元素具有同一天的元素,所以我的 map 最终只有一个元素。

我真的不知道如何解决这个...

在此先感谢您的帮助。

最佳答案

Map<Data, List<MyObject>> result = new HashMap<Data, List<MyObject>>;
for (List<MyObject> list : myMap.values()) {
    for (MyObject myObject : list) {
        Date date = myObject.getDate();
        List<MyObject> newList = result.get(date);
        if (newList == null) {
            newList = new Arraylist<MyObject>;
            result.put(date. newList);
        }
        newList.add(myObject);
    }
}

关于java - 循环迭代器直到它为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662572/

相关文章:

java - 强制ebean更新对象

java - 从Java Map Reduce代码读取Hive托管表

Java 我有一个无法跨类解析的数组

c++ - 如果我使用 vector::begin() 而不是 std::back_inserter(vector) 作为 set_intersection 的输出会怎样?

reference - 在 Rust 中,为什么 std::iter::Iterator 的 min 函数返回一个引用?

Java增量编号

java - 如何使用 HashMap 模拟我的 Mongodb 存储库

java - 使用迭代器和 ArrayList 的具有 10 个记录的多个 ArrayList

python - Matplotlib 绘图生成器

C++, vector 上的对象