【问题标题】:Group items in a set nicely很好地将一组项目分组
【发布时间】:2013-06-12 17:39:25
【问题描述】:

假设我有一组类:我的是Set < CourseListing >

CourseListing 的一些示例结果如下所示:

Number    Name            Product
TRN-001   Sample Name1    prod1
TRN-001   Sample Name1    prod2
TRN-001   Sample Name1    prod3
TRN-002   Sample Name2    prod1
TRN-003   Sample Name3    prod1

如何将 TRN-001 中的产品组合到一个字段中(即逗号分隔的字符串)?然后它应该如下所示:

Number    Name            Product
TRN-001   Sample Name1    prod1, prod2, prod3
TRN-002   Sample Name2    prod1
TRN-003   Sample Name3    prod1

以下是CourseListing 类的示例:

public class CourseListing{
    private String Number, Name, Product;
    public CourseListing(){
    }
//getters and setters;
}

我正在使用List < CourseListing >

【问题讨论】:

    标签: java list class collections set


    【解决方案1】:

    我会这样做,注意它可能不是最好的解决方案,但它会像您根据 CourseListing 编号解释的那样对它们进行分组。 1.为你的第一个列表创建一个单独的类作为你的对象类(真的是一个 POJO

    public class CourseListing {
        private String number;    
        private String Name;  
        private String product;
        public String getNumber() {
            return number;
        }
        public void setNumber(String number) {
            this.number = number;
        }
        public String getName() {
            return Name;
        }
        public void setName(String name) {
            Name = name;
        }
        public String getProduct() {
            return product;
        }
        public void setProduct(String product) {
            this.product = product;
        }
    }
    
    1. 创建第二个类对象或使用现有的像上面一样。现在每个组都有两个对象。

      CourseListing CourseListingNotGrouped = new CourseListing(); CourseListing CourseListingGrouped = new CourseListing();

    2. 当 number=TRN-001 时,遍历您的第一个列表并将其添加到您的第二个对象列表中。

    祝你好运

    【讨论】:

      【解决方案2】:

      您可以遍历集合并过滤所有CourseListing 其中Number eq TRN-001

      List<CourseListing> tempList = new ArrayList<>();
      for(CourseListing c:courseListingList){
          if(c.getNumber().equals("TRN-001"))
             tempList.add(c);
      }
      

      你也可以使用 -

      q-Link 是一个 Java 集合操作库,可最大限度地减少工作量。

      List<CourseListing> result = sf.forList(courseListing).filter().p("Number").eq().val("TRN-001").toList();
      

      【讨论】:

      • 嗯,我可以修改我的 sql 并使用“按名称分组”,我会得到类似的结果。我真正需要的是将产品转移到一个大字符串中,列出该字段中的所有产品。
      【解决方案3】:

      您的 TRN 号码似乎是标识符,那您为什么不使用地图而不是列表呢?

      当必须添加新产品时:

      • 如果代码不存在,请添加条目(CourseListing.getTNR, CourseListing)

      • 如果存在,请修改您现有的 CourseListing。

      【讨论】:

        【解决方案4】:

        我以另一种方式解决了这个问题(通过更改通过 SQL 结果集创建列表的方式)。不过,这仍然是一个有趣的问题,我同意我应该使用 HashMap。感谢您的帮助。

        如果有人遇到类似问题,下面是代码:

         conn = DriverManager.getConnection(url, userName, password);
        
                stmt = conn.createStatement();
                ResultSet rset = null;
        
                PreparedStatement pstmt = null;
        
                pstmt = conn.prepareStatement("select * FROM CourseProduct "
                        + "INNER JOIN Course "
                        + "ON CourseProduct.number=Course.number "
                        + "inner join Product "
                        + "on CourseProduct.P_ID=Product.P_ID "
                        + "WHERE "
                        + "(superProduct = ? or ? ='') "
                        + "and (product = ? or ? ='') "
                        + "and (location = ? or ? ='') "
                        + "and (type = ? or ? ='') "
                        + "and (category = ? or ? ='') "
                        + "order by Course.number asc");
        
                pstmt.setString(1, superProduct);
                pstmt.setString(2, superProduct);
                pstmt.setString(3, product);
                pstmt.setString(4, product);
                pstmt.setString(5, location);
                pstmt.setString(6, location);
                pstmt.setString(7, type);
                pstmt.setString(8, type);
                pstmt.setString(9, category);
                pstmt.setString(10, category);
        
        
                rset = pstmt.executeQuery();
        
                String tempString = " ";
        
                String tempNumber1=null, tempNumber2 = null;
        
                while (rset.next()) {
                    // here we go
                    tempNumber1 = rset.getString("number");
        
                     tempString+=", "+rset.getString("product");
        
                    if (tempNumber1 == null ? tempNumber2 == null : tempNumber1.equals(tempNumber2)) {
        
                       courseListing.remove(courseListing.size()-1);
        
                        courseListing.add(new CourseListing(
                                rset.getDouble("price"),
                                rset.getString("number"),
                                rset.getString("name"),
                                rset.getString("location"),
                                rset.getString("unit"),
                                rset.getString("duration"),
                                rset.getString("type"),
                                rset.getString("role"),
                                rset.getString("category"),
                                rset.getString("maxNumStudents"),
                                rset.getString("superProduct"),
                                rset.getString("subProduct"),
                                tempString));
                    } 
        
                    else {
                        tempString=rset.getString("product");
                        tempNumber2 = rset.getString("number");
        
                        courseListing.add(new CourseListing(
                                rset.getDouble("price"),
                                tempNumber2,
                                rset.getString("name"),
                                rset.getString("location"),
                                rset.getString("unit"),
                                rset.getString("duration"),
                                rset.getString("type"),
                                rset.getString("role"),
                                rset.getString("category"),
                                rset.getString("maxNumStudents"),
                                rset.getString("superProduct"),
                                rset.getString("subProduct"),
                                tempString)); 
        
                    } 
                }
        

        【讨论】:

          猜你喜欢
          • 2013-10-08
          • 1970-01-01
          • 2021-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2014-06-30
          • 1970-01-01
          相关资源
          最近更新 更多