0

クラスのセットがあるとします。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 の商品を 1 つのフィールド (カンマ区切りの文字列) にグループ化するにはどうすればよいですか? 次に、次のようになります。

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 >

4

4 に答える 4

0

これが私がそれを行う方法です。これは最良の解決策ではないかもしれませんが、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. 2 番目のクラス オブジェクトを作成するか、上記のように既存のものを使用します。これで、各グループに 2 つのオブジェクトができました。

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

  2. number=TRN-001 の場合、最初のリストをループし、それをオブジェクトの 2 番目のリストに追加します。

幸運を

于 2013-06-12T17:54:37.393 に答える
0

CourseListingコレクションを反復処理し、すべてのwhich Numbereqをフィルター処理できます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();
于 2013-06-12T17:54:43.063 に答える
0

この問題を別の方法で解決しました (代わりに 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-06-13T14:19:36.050 に答える
0

あなたの TRN 番号は識別子のようですが、リストの代わりにマップを使用してみませんか?

新製品を追加する必要がある場合:

  • コードが存在しない場合は、エントリを追加します(CourseListing.getTNR, CourseListing)

  • 存在する場合は、既存の CourseListing を変更します。

于 2013-06-12T17:50:59.607 に答える