ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ソート、マージ、分類ごとの集計などの処理のまとめ(JAVA)

2009-08-07 16:27:05 | Weblog

まえに、データ構造をまとめたんだけど、そこで
で、保存したデータをどう処理するかは別の機会で・・・
と書いたので、ちょっと思いついた処理たちをメモメモ

(JAVA Ver6でやることを前提に書いてます)。



■ソート
Arrays.sort(ソートしたい配列);
 昇順:そのまま0から、最後まで配列出力
 逆順:最後から0まで出力

*レコードのある要素を基準にソートしたい場合
 ソートしたいレコード群(ファイル)の各レコードに対して
  ・キーを作成し、
  ・ハッシュマップにmap.put(上記キー,レコード);の形で
   レコードをセット
 String keyList[] =(String[])map.keySet().toArray(new String[0]);
  で、キー項目を配列の形で取り出し(キーは文字列とする)
Arrays.sort(keyList);
 keyList[]の0から最後まで、map.getして、レコードを取り出す




■マージ(併合)
 マージしたい2つのレコード群(ファイル)の各レコードに対して
 まず、元になるレコード群(マスタ)から
  ・キーを作成し、
  ・ハッシュマップにmap.put(上記キー,レコード);の形で
   レコードをセット
 次に、新しいレコード群(トランザクション)から
  ・キーを作成し、
  ・上記ハッシュマップと同じハッシュマップに
   map.put(上記キー,レコード);の形でレコードをセット
 String keyList[] =(String[])map.keySet().toArray(new String[0]);
  で、キー項目を配列の形で取り出し(キーは文字列とする)
 keyList[]の0から最後まで、map.getして、レコードを取り出す

*この操作で、結果として、既存データは最新のもので置き換えられ、
 ないデータは追加される(マージされる)
*Javaでない場合は、HashMapを連想配列にかえる




■最大最小の荒業

 Arrays.sort()する
 0番目の要素が最小値、最終版目(個数-1)が最大

 (ふつーに求めたほうが理論上は早いけど ^^;)




■コード変換

・コード変換表を読み込み、HashMapに
 map.put(コード,言葉);
 の形で入力する

・コードがきたら、map.get(コード)で、その言葉が取得できる

 →本来のハッシュマップの使い方




■存在チェック

・レコード群(ファイル、DB検索結果)の各レコードに対し、
  キーを作成し
  HashMapに map.put(キー,レコード);
 の形で入力する

・存在チェックしたいキーに対して
 map.get(存在チェックしたいキー)
 して、null以外が返ってきたら、存在、nullなら存在しない




■単一化(キー値が複数レコードに存在する場合、それをまとめて1レコード)

・レコード群(ファイル、DB検索結果)の各レコードに対し、
  キーを作成し
  HashMapに map.put(キー,レコード);
 の形で入力する

・そのハッシュマップに対して、
 String keyList[] =(String[])map.keySet().toArray(new String[0]);
  で、キー項目を配列の形で取り出し(キーは文字列とする)
 keyList[]の0から最後まで、map.getして、レコードを取り出す

*ここで、keyListをソートすると、キー順に出力する

 一方、入力する際に

  HashMapに map.put(キー,配列の添え字番号);

 にして、
 Integer valList[] =(Integer[])map.valueSet().toArray(new Integer[0]);
 として、値のリストをとり、この値リストをArrays.sortでソートして、

 値リスト(配列の添え字番号)に相当する元データを順に出力すると、
 入力順に単一化できる




■分類

・ハッシュマップ(mapとする)を用意する

・レコード群(ファイル、DB検索結果)の各レコードに対し、
  HashMapから map.get(分類コード);
    で値をとってくる(返り値はArrayListのはず)。

    nullだったら(その分類のデータがない)
      ArrayListをnewして、返り値の変数にセット

  返り値の変数(ArrayList)に、レコードをadd

  map.put(分類コード,返り値の変数);する

・全レコード上記の処理をしたら、
 String keyList[] =(String[])map.keySet().toArray(new String[0]);
  で、キー項目を配列の形で取り出し(キーは文字列とする)
 keyList[]の0から最後まで、map.getすると、分類されたレコード(ArrayList)
 がとれるので、これを順に出力すればOK




■分類ごとに、最大最小合計件数

・ハッシュマップを用意する
  最大用なら、最大用で1つ
  最大最小を同時に求めるなら、
    最大用、最小用、(用途別に)1つづつ

・レコード群(ファイル、DB検索結果)の各レコードに対し、
  (用途別の)HashMapから map.get(分類コード);
    で値をとってくる

    nullだったら(その分類のデータがない)
      最大、最小、合計値の場合、
         map.put(分類コード,そのデータの値);する
      件数だったら
         map.put(分類コード,1);する
    nullじゃなければ
      最大:保存してある値より、そのデータのほうが大きければ
         map.put(分類コード,そのデータの値);する
      最小:保存してある値より、そのデータのほうが小さければ
         map.put(分類コード,そのデータの値);する
      合計:保存してある値に、そのデータをプラスして
         map.put(分類コード,そのデータの値);する
      件数:保存してある値に、1プラスして
         map.put(分類コード,そのデータの値);する

・全レコード上記の処理をしたら、
 String keyList[] =(String[])map.keySet().toArray(new String[0]);
  で、キー項目を配列の形で取り出し(キーは文字列とする)
 keyList[]の0から最後まで、map.getすると、分類された最大値などが全部
 取り出せる


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

画面の種類と設計方法

2009-08-07 14:22:14 | Weblog

 1画面単位で考えた場合、画面の部分は2つに分かれるということは、前に書いたけど、

 今度は、1システムの中で、画面は、どんなふうに分かれるか、
     その画面において、上記の2つの部分(項目とイベント)はどうなるか
 について書きたいと思います。




■画面の種類は大きく2種類

 画面の種類は、大きく2種類(その他をあわせると3種類)に分かれると思います。

(1)業務プロセスを入出力する画面
 その画面が、ある業務に対応します。業務の(取引等)情報を入力、表示します。
 例:発注

(2)データ管理画面
 マスタメンテナンス画面など、業務に必要となる(マスタ)情報を入力、更新、削除します。
 例:取引先、祝祭日カレンダー

(3)その他
 上記(1)、(2)に当てはまらないもの
 例:初期画面(業務起動画面・ポータル)

 1システムにおいて、おなじものなのに(1)、(2)両方用意することもあります。
 (受注入力(1)と、受注検索・修正画面(2))
 どちらでもできるものもあり、その場合、会社、SEさんによって、どっちを使うかのくせがある気がします。




■(1)業務プロセスを入出力する画面

 その業務に必要な項目が入力、出力項目になります。
 ボタン(イベント)に関しては、基本的にその業務の「実行」と「キャンセル}(戻る・クリアなど)になります。

 画面割としては、

・業務プロセス画面
   ↓
 (確認画面:ないことあり)
   ↓
 保存した旨を通知ないしはエラー画面

となります。




■(2)データ管理画面

 この場合は、

・検索項目画面
   ↓
・一覧画面
   ↓
・詳細画面(編集画面)

となります。Yahooなどの検索サイトの画面割り

検索ワード入力
   ↓
検索結果一覧
   ↓
サイト表示

と同じですね。

そして、
検索項目画面では
 ・検索対象項目、条件が入力項目
 ・検索実行、戻るがイベント(ボタン)

一覧画面では
 ・検索結果(一覧)が、出力項目
 ・チェックボタンなど、一覧をチェックする入力項目があるときもある。
 ・追加、編集、削除、詳細表示などのイベントがあり、
  データに親子関係がある場合、子画面にいくイベントがある
  追加、編集は、編集画面にすすみ、詳細表示がある場合は、詳細表示へ遷移
  削除に関しては、(必要なら確認画面)、このイベントで処理(詳細遷移ナシ)
  子画面に行く場合は、
     子画面の検索項目があれば、子画面の検索項目画面
     子画面の検索項目がなければ子画面一覧表示
  へいく。

詳細画面(編集画面)では
 ・詳細表示→詳細画面の場合、出力項目のみ
 ・追加、編集に関しては、登録する情報に関する箇所を入力項目とする
 ・イベントは、実行と、キャンセル
 ・実行の場合、確認画面が出ることもあるが、
   出すにしろ出さないにしろ、保存して、たいてい一覧に戻る。




■(3)その他

 呼び出し画面は、(1)、(2)のものを並べてボタンにして、
起動できるようにする。




 上記の例として、検索エンジンを上げたが、SugarCRMなども、「(2)データ管理画面」と同じ構造を持っている。
 (最近知らないけど・・・)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする