2016-09-07 1 views
0

私はJavaで始まりました。 私は自分の問題について説明しています。私はフラットファイルを持っていて、Javaを読みました。 目的は、複数の出力ファイル(1つのオーダーにつき1つのファイル)を作成することです。ファイルでファイルをカットしました。Java(2 by 2)

、例えば私が注文番号(136670136609)を持っている:

136670 00000000000000000 ABC 

136670 00000000000000000 ABD 

136670 00000000000000000 ABE 

136609 00000000000000000 ABC 

136609 00000000000000000 ABD 

136609 00000000000000000 ABF 

136609 00000000000000000 ABE 

は、だから私はHashMapを作成し、または私が注文番号136670136609を置きます。 マイHashMap現在:

キー136670

136670 00000000000000000 ABC 

136670 00000000000000000 ABD 

136670 00000000000000000 ABE 

キー136609

136609 00000000000000000 ABC 

136609 00000000000000000 ABD 

136609 00000000000000000 ABE 

136609 00000000000000000 ABF 

136609 00000000000000000 ABE 

コード:

LinkedHashMap<String, StringBuilder> order = new LinkedHashMap<String, StringBuilder>(); 
while((line = br.readLine()) != null){ 
    String lineId = line.substring(ORDER_START_POSITION, ORDER_END_POSITION); 
    if(order.get(lineId) != null){ 
     StringBuilder stringBuilder = order.get(lineId); 
     stringBuilder.append("\n"+(line)); 
     order.put(lineId, stringBuilder); 
    } 
    else{ 
     order.put(lineId, new StringBuilder(line)); 
     } 
} 

私は、コードのほとんどを置きます。私はLinkedHashMapを使ってファイルを出力します。

私のコードは動作しますが、私は私に必要な2つのことを行うために到着しない:

  • LinkedHashMapで入力値の数が2よりも大きい場合、私は、その後、新しいHashMapを作成したいです4新しいものがほしいHashMap

  • LinkedHashMapで入力値の数が2より大きい場合

    は、私は上の4から801に等しい場合、800の数字をインクリメントします。私のサンプルファイルと例えば

キー:136670

800

136670 00000000000000000 ABC 

136670 00000000000000000 ABD 

。キー


136670

:コード801

136670 00000000000000000 ABE 

。キー


136609

800

136609 00000000000000000 ABC 

136609 00000000000000000 ABD 

。キー


136609

:コード801

136609 00000000000000000 ABE 

136609 00000000000000000 ABF 

。キー


136609

:コード802

136609 00000000000000000 ABE 

if (i % 2 == 0) { 
    my 
} 

そして私:


私はこの方法をテストした私はTreeMapLinkedHashMapHashMap通過すると思ったが、私は...いくつかのサブファイルに

HashMapをカットすることはできませんハッシュマップのリスト: List<HashMap<String, StringBuilder>> maps = new ArrayList<>(); しかし、動作しません。

この部門の成功のアイデアはありますか?

ありがとうございます。

+0

は、代わりに ''のLinkedHashMap <文字列、リスト>を構築してみます。 – Andreas

+0

Andreasさんに感謝します。しかし、 'LinkedHashMap >'私はコンテンツにアクセスできません – Maria

答えて

0

私はこのコードはあなたがここに私の入力です

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader("input.txt")); 

    // this map holds all orders 
    // for each order, it will have a List of orderItems 
    // orderItems is a List of String 
    Map<String, List<List<String>>> map = new LinkedHashMap<>(); 
    String line; 
    while((line = br.readLine()) != null){ 
     String orderId = line.substring(0, 6); 

     // find order 
     List<List<String>> order = map.get(orderId); 
     // if we dont have it yet, lets create it 
     if (order == null) { 
      order = new ArrayList<>(); 
      map.put(orderId, order); 
     } 

     List<String> orderItems; 
     // if our order is empty, no items at all, create the first group of items 
     if (order.isEmpty()) { 
      orderItems = new ArrayList<>(); 
      order.add(orderItems); 
     } else { 
      // otherwise we get the last group of items 
      orderItems = order.get(order.size()-1); 
     } 

     // if this group, already have 2 items, we create a new one 
     if (orderItems.size() == 2) { 
      orderItems = new ArrayList<>(); 
      order.add(orderItems); 
     } 

     // finally we add the item, to the group (orderItems) 
     orderItems.add(line); 
    } 
    br.close(); 

    // now lets check if it worked 

    for (String orderId: map.keySet()) { 
     System.out.println("OrderId: "+orderId); 
     List<List<String>> order = map.get(orderId); 
     int groupId = 800; 
     for (List<String> orderItems: order) { 
      System.out.println(" Group: "+groupId); 
      for (String item: orderItems) 
       System.out.println(" "+item); 
      groupId++; 
     } 
    } 
} 

行うために必要なものの例として役立つことを願っています。

136670 00000000000000000 ABC 
136670 00000000000000000 ABD 
136670 00000000000000000 ABE 
136609 00000000000000000 ABC 
136609 00000000000000000 ABD 
136609 00000000000000000 ABE 
136609 00000000000000000 ABF 
136609 00000000000000000 ABE 

TXTここで出力です:

OrderId: 136670 
    Group: 800 
    136670 00000000000000000 ABC 
    136670 00000000000000000 ABD 
    Group: 801 
    136670 00000000000000000 ABE 
OrderId: 136609 
    Group: 800 
    136609 00000000000000000 ABC 
    136609 00000000000000000 ABD 
    Group: 801 
    136609 00000000000000000 ABE 
    136609 00000000000000000 ABF 
    Group: 802 
    136609 00000000000000000 ABE 
関連する問題