0

ArrayList にデータの行があります。List からデータを読み取り、それを別の形式に変換して、フラット ファイルに書き込む必要があります。

List Data:
General Details|S|!|!|66T4051|N|MACH|a
Charge Details|S|!|!|66T4051| 3827|N|
Charge Details|S|!|!|66T4051| 3828|N| 
Insurance Details|S|!|!|66T4051|   f|
Insurance Details|S|!|!|66T4051|   h|
Insurance Details|S|!|!|66T4051|   p|

ここで、GeneralDetails カウントは 1 で、これがマスター データです。Charge Details の数は 2 です。Insurance Details の数は 3 です。

上記のリスト データを以下の形式の 1 つの文字列に変換する必要があります。

ROW1|General Details|S|!|!|66T4051|N|MACH|a|2|Charge Details|S|!|!|66T4051| 3827|N|Charge Details|S|!|!|66T4051| 3828|N|3|Insurance Details|S|!|!|66T4051|   f|Insurance Details|S|!|!|66T4051|  h|Insurance Details|S|!|!|66T4051|   p$ 

各レコードの前にカウントを配置する必要があります。まあ言ってみれば。

ROW1 - 1 is the count of General Details
|2|Charge Details - 2 is the count of Charge Details
|3|Insurance Details - 3 is the count of Insurance Details

これを達成する方法を提案してください。

各行のカウントを取得しました。

map>{Charge Details=2, General Details=1,Insurance Details=3}

しかし、その後に進むことができません。

public void processRows(LinkedList<LinkedList<Object>> linkedList,String intfCode,String bankId)
{
for(int i=0;i<linkedList.size();i++)
{
   List<Object> list =  linkedList.get(i);
   //System.out.println("list>>"+i+""+list);

   List<Object> tableNameList =  new ArrayList<Object>();
   LinkedHashMap map = new LinkedHashMap();

   for(int j=0;j<list.size();j++)
   {
       String rowOfLine = (String)list.get(j);
       String split[] = (rowOfLine.split("\\|"));
       String tableName=split[0];
       tableNameList.add(tableName);
   }
   for(int j=0;j<list.size();j++)
   {
       String rowOfLine = (String)list.get(j);
       String split[] = (rowOfLine.split("\\|"));
       String tableName=split[0];

       int count = Collections.frequency(tableNameList, tableName);
       System.out.println("count>>"+count);
       if(!(map.containsKey(tableName)) && tableName!=null)
       {
       map.put(tableName, count);
       }
       //transformRow(tableName,intfCode,bankId,rowOfLine,collateralType);
   }
       System.out.println("map>"+map);


}
}
4

3 に答える 3

0

I have rows of data in ArrayList. I need to read the data from List and convert it to another format and write to flat file.

ここにあなたがあなたの問題をどのように解決することができるかについての考えがあります。私はこのコードをテストしていないことを覚えておいてください。私の意図は、問題をどのように解決できるかについてのアイデアを示すことです。ArrayListwithdataの名前がcontents...であると仮定します。

Map<String, List<String>> indexedContents = new HashMap<String, List<String>>();
for (String str : contents) {
    String[] splittedString = str.split("\\|");
    if (splittedString.length > 0) {
    //Index your map on the first entry which is something like
    //"Charge Details"
    if(indexedContents.get(splittedString[0]) == null){
        indexedContents.put(splittedString[0], new ArrayList<String>());
    }
    indexedContents.get(splittedString[0]).add(str);
    }
}
StringBuffer output = new StringBuffer();
for(String key : indexedContents.keySet()){
    output.append(indexedContents.get(key).size()).append("|");
    for(String values : indexedContents.get(key)){
    output.append(values).append("|");
    }
}

マップのエントリは、であるため、サイズを追跡しますList。最後のforループは、実際に出力形式を作成します。これは、必要に応じて変更できます。これがお役に立てば幸いです。

于 2013-02-21T14:33:08.267 に答える
0

すべてのリストを反復処理し、リストの正しい順序に注意してください。新しいリスト タイプが始まるたびに、反復する前にリストの数を文字列に追加します。

于 2013-02-21T14:13:35.423 に答える
0

これがあなたの要件のコードです。

コード:

import java.util.ArrayList;

public class Sample1 {

    public static void main( String[] str ) {
        ArrayList<String> list = new ArrayList<String>();
        list.add( "General Details|S|!|!|66T4051|N|MACH|a" );
        list.add( "Charge Details|S|!|!|66T4051| 3827|N|" );
        list.add( "Charge Details|S|!|!|66T4051| 3828|N|" );
        list.add( "Insurance Details|S|!|!|66T4051|   f|" );
        list.add( "Insurance Details|S|!|!|66T4051|   h|" );
        list.add( "Insurance Details|S|!|!|66T4051|   p|" );

        StringBuffer mainBuf = new StringBuffer();
        StringBuffer tempBuf = new StringBuffer();

        int count = 0;
        String header = null;
        for( String item : list ) {
            String[] values = item.split( "\\|" );

            // if this is first element
            if( header == null ) {
                header = values[0];
                count = 1;
            }
            // check if the previous element and present element is not same.
            else if(!header.equals(values[0])) {
                append( count, header, mainBuf, tempBuf.toString() );
                tempBuf.delete( 0, tempBuf.length() );
                count = 1;
                header = values[0];
            } else {
                count++;
            }
            if( tempBuf.length() > 0 && tempBuf.charAt( tempBuf.length() - 1 ) != '|' ) {
                tempBuf.append( "|" );
            }
            tempBuf.append( item );
        }
        append( count, header, mainBuf, tempBuf.toString() );

        // replace last character as $ 
        int lastIndex = mainBuf.length();
        mainBuf.replace( lastIndex - 1, lastIndex, "$" );
        System.out.println(" mainBuf => " + mainBuf );
    }

    public static void append( int count, String header, StringBuffer mainBuf, String str ) {
        if( header.equalsIgnoreCase(  "General Details" ) ) {
            mainBuf.append( "ROW" + count + "|" ).append( str );
        } else {
            if( mainBuf.charAt( mainBuf.length() - 1 ) != '|' ) {
                mainBuf.append( "|" );
            }
            mainBuf.append( count + "|" ).append( str );
        }
    }
}
于 2013-02-21T14:45:55.567 に答える