【问题标题】:Getting groups as a list from arraylist从arraylist获取组作为列表
【发布时间】:2015-02-25 12:33:43
【问题描述】:

我正在关注 emaze-dysfunctional 从数组列表进行分组。在以下代码中,我可以从地图中分组。控制台显示分组元素。我需要将它们添加到数组列表中。

例如。 repay liat 有 120 个元素,但分组映射包含三个组,每个组 40 个元素。

        List<LoanRepaymentSchedule> repay = loanService
                .getLoanRepaymentScheduleById(groupLoan.getLoanId());

        Map<Integer, List<LoanRepaymentSchedule>> map = Groups.groupBy(
                repay, new Pluck<Integer, LoanRepaymentSchedule>(
                        LoanRepaymentSchedule.class, "memberCount"));
        System.out.println ("map.keySet().size() "+map.keySet().iterator());

        for (Integer key : map.keySet()) {
            List<LoanRepaymentSchedule> pro =  map.get(key);
            System.out.println("Element-******* "+pro.size());          
            System.out.println("Element-******* "+pro.get(0));          

        }

如何将这 3 个分组元素保存在单独的数组列表中,例如 list1、list2、list3。

还款清单如下,

    id 1 val 5
    id 1 val 6
    id 1 val 1
    id 1 val 5
    id 1 val 6
    id 1 val 1

我需要列表 1 作为

id 1 val 5
id 1 val 5

将 2 列为

id 1 val 6
id 1 val 6

将 1 列为

id 3 val 1
id 1 val 1

【问题讨论】:

  • 您需要列表 (1, 2, 3) 做什么?
  • 了解id是关键?而 5 或 6 是 pro.get(0);?
  • 您到底需要什么?您的地图中已经存储了不同的列表。这些列表不是已经包含你想要的了吗?
  • @Eran 我认为他有一个列表,他想在 3 个不同的列表中对其进行排序
  • @Mohammed Housseyn Taleb,你就是……

标签: java arraylist grouping


【解决方案1】:
    try this ? 

     ArrayList[] lists=new ArrayList[3];
    for (ArrayList list : lists) {
        list=new ArrayList();
    }
    boolean firstInsert=true;
    int i=0;
     for (Integer key : map.keySet()) {
        List<LoanRepaymentSchedule> pro =  map.get(key);
        System.out.println("Element-******* "+pro.size());          
        System.out.println("Element-******* "+pro.get(0));
         try {

             if (firstInsert) {
                 if (lists[0].isEmpty()) {
                     lists[0].add(pro);
                     break;
                 }
                 if (lists[1].isEmpty()) {
                     lists[1].add(pro);
                     break;
                 }
                 if (lists[2].isEmpty()) {
                     lists[2].add(pro);
                     firstInsert=false;
                     break;
                 }
             }

             if(pro.get(0)==lists[0].get(lists[0].size()-1)){lists[0].add(pro);
        }
             if(pro.get(0)==lists[1].get(lists[1].size()-1)){lists[1].add(pro);
        }
             if(pro.get(0)==lists[2].get(lists[2].size()-1)){lists[2].add(pro);
        }
         } catch (Exception e) {
         }


    }

【讨论】:

  • 那么第一个列表就如你所愿在数组循环中。如果它有效,我不知道如何尝试。
【解决方案2】:

如果我理解正确,您希望将 3 个列表添加到一个列表中。

你可以简单地做:

    List<LoanRepaymentSchedule> output = new ArrayList<LoanRepaymentSchedule>();
    for (Integer key : map.keySet()) {
        output.addAll(map.get(key));        
    }

顺便说一句,我不熟悉这个 Groups 类,但 Java 8 具有更简单的语法来实现相同的功能:

Map<Integer, List<LoanRepaymentSchedule>> = 
    repay.stream()
         .collect(Collectors.groupingBy(LoanRepaymentSchedule::getMemberCount);

假设LoanRepaymentSchedule 有一个getMemberCount 方法,您可以通过该方法对LoanRepaymentSchedule 实例进行分组。

【讨论】:

  • 我的英语不好,他不是要求将所有数据保存在 3 个不同的列表中吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2019-03-30
  • 2019-06-29
  • 1970-01-01
  • 2015-11-19
  • 2021-12-08
  • 2015-10-10
相关资源
最近更新 更多