1

私は次の問題に直面しています。各フィールド値をCSVファイルにエクスポートする必要があるJavaオブジェクトのツリーがあります。エクスポートの結果は、SQLの左外部結合(デカルト積と呼ばれます)の場合と同様である必要があります。

クラスの作者

@DataField(pos = 1)
String firstName;

@DataField(pos = 2)
String lastName;

@OneToMany
List<Book> books;

@OneToMany
List<Editor> editors;

@DataField(pos = 7)
String Age;

クラスの本

@DataField(pos = 3)
String title;

@DataField(pos = 4)
String year;

@OneToMany
List<Reference> references;

クラスリファレンス

@DataField(pos = 5)
String type;

@DataField(pos = 6)
String code;

クラスエディタ

@DataField(pos = 8)
String name;

備考:-@ DataFieldアノテーションは、CSVレコード内の値の位置を示します-この例では、2冊の本(「Camelinaction」と「Camelinaction2」)のリストを含む1つのオブジェクトAuthor(Charles、Moulliard)があります。 。最初の本には3つのリファレンス(ISBN 1234、ISBN 5678、ISBN 999)があり、2番目の本には1つのリファレンス(ISBB 1111)があります。著者には、2人の編集者のリストも含まれています( "manning"、 "manning 2")

これが例であり、必要な結果があります

"firstName"、 "lastName"、 "age"、 "title"、 "year"、 "type"、 "code"、 "name" "charles"、 "moulliard"、 "camel in action"、 "2009"、 " ISBN "、" 1234 "、" manning "、" 43 "" charles "、" moulliard "、" camel in action "、" 2009 "、" ISBN "、" 1234 "、" manning 2 "、" 43 "" charles "、" moulliard "、" camel in action "、" 2009 "、" ISBN "、" 5678 "、" manning "、" 43 "" charles "、" moulliard "、" camel in action "、" 2009 "、" ISBN "、" 5678 "、" manning 2 "、" 43 "" charles "、" moulliard "、" camel in action "、" 2009 "、"ISBN"、 "9999"、 "manning"、 "43" "charles"、 "moulliard"、 "camel in action"、 "2009"、 "ISBN"、 "9999"、 "manning 2"、 "43" " charles "、" moulliard "、" camel in action 2 "、" 2011 "、" ISBB "、" 1111 "、" manning "、" 43 "" charles "、" moulliard "、" camel in action 2 "、" 2011 "、" ISBB "、" 1111 "、"マニング2 "、" 43 ""ISBB"、 "1111"、 "manning"、 "43" "charles"、 "moulliard"、 "camel in action 2"、 "2011"、 "ISBB"、 "1111"、 "manning 2"、 "43""ISBB"、 "1111"、 "manning"、 "43" "charles"、 "moulliard"、 "camel in action 2"、 "2011"、 "ISBB"、 "1111"、 "manning 2"、 "43"

LinkedListのマップにフィールド値を配置するために再帰関数を使用しようとしました:整数= CSV内のフィールドの位置、Linkedlist =オブジェクトのリストですが、ツリー内の要素の位置に関する情報が失われました。

よろしく、

チャールズ

4

2 に答える 2

1

私はおそらくあなたの問題を理解していません。このようなものは機能しませんか?

ArrayList<ArrayList<String>> table = new ArrayList<ArrayList<String>>();
for (Author author:authors) {
    for (Book book:author.getBooks()) {
        for (Reference reference:book.getReferences()){
            for (Editor editor:editors) {
                table.add(new ArrayList<String>(Arrays.toList({author.getFirstName(), 
                                            author.getLastName(), 
                                            book.getTitle(), 
                                            book.getYear(), 
                                            reference.getType(), 
                                            reference.getCode(), 
                                            editor.getName()})
                                    );
                );
            }
        }
    }
}
于 2009-10-15T11:25:45.250 に答える
0
        Map<Integer, List> values = new HashMap<Integer, List>();
    values.put(1, Arrays.asList("Charles"));
    values.put(2, Arrays.asList("Moulliard"));
    values.put(3, Arrays.asList("Camel in Action", "Camel in Action 2"));
    values.put(4, Arrays.asList("2009", "2011"));
    values.put(5, Arrays.asList("ISBN", "ISBN", "ISBN"));
    values.put(6, Arrays.asList("1234", "9876", "7777"));
    for (List l : s.product(values)) {
        System.out.println(l);
    }



}

public List<List> product(Map<Integer, List> values) {

       List<List> product = new ArrayList<List>();
       Map<Integer, Integer> index = new HashMap<Integer, Integer>();
       boolean incIndex = false;

       while (!incIndex) {

           incIndex = true;
           List v = new ArrayList();

           for (int i = 1; ; i++) {
               List l = values.get(i);
               if (l == null) {
                   break;
               }
               int idx = 0;
               if (index.containsKey(i)) {
                   idx = index.get(i);
               }
               v.add(l.get(idx));
               if (incIndex) {
                   if (++idx >= l.size()) {
                       idx = 0;
                   } else {
                       incIndex = false;
                   }
                   index.put(i, idx);
               }
           }
           product.add(v);
       }
       return product;
}
于 2009-10-15T11:59:01.650 に答える