2017-07-27 5 views
2

ファイル形式をJavaマップに変換したい。Javaの機能パラダイムを使って特定のファイル形式をMapに簡潔に変換する8

私のチームは、以下のような特定のファイル形式を使用しています。例えば

<<<element1s_key1>>>value1 
<<<element1s_key2>>>value2 
<<<element1s_key3>>>value3 

<<<element2s_key1>>>value1 
<<<element2s_key2>>>value2 
<<<element2s_key3>>>value3 

<<<element3s_key1>>>value1 
<<<element3s_key2>>>value2 
<<<element3s_key3>>>value3 

<<<name>>>Mike 
<<<age>>>10 
<<<gender>>>M 

<<<name>>>Mary 
<<<age>>>15 
<<<gender>>>F 

<<<name>>>Yoon 
<<<age>>>12 
<<<gender>>>M 

... 

は、その全体のキーと値の行が存在しないことを意味し、各キー名は、各要素のために同じである、いくつかのオプションのエントリが可能であることができます。 私はその形式のように呼び出す任意の名前があるかわからない(任意の名前があるのでしょうか?)

だから、タイトルとしての私の質問は

である私は、Javaリストにそのフォーマットを変換することができ - 。マップ構造を介してJava 8の機能的パラダイム?

たとえば、以下のようになります。

[[("name", "Mike"), ("age", 10), ("gender", "M")], [("name", Mary), ... ]] 

このファイルは非常に大きいので、ファイル全体をアップロードすることはできません。 だから私はいくつかの怠惰を使いたいです。 (ストリーム構造のようなもの)

+2

"Functional Paradigm"を使用している可能性がありますが、ストリーミングを開始するには独自の「Spliterator」を作成する必要があります。とにかくファイルを読むことはボトルネックになる可能性があり、並列化できないため、並列処理を行うようなことではありません。 – Andreas

+1

いくつかのコードを表示できますか?問題を解決するためにこれまでに何を試みましたか? – Zabuza

+0

@Andreas 多分あなたが間違ってしまったかもしれません。私は、 'map()'のような関数を使う意味だけのために "Functional Paradigm"という言葉を使いました。 私は実際にはそれのための並列処理は必要ありません、そのファイルフォーマットをより簡潔に解析したいだけです。 forループを使用しないでください。 –

答えて

3

最初に、データファイル形式は、おそらく構造化されたデータを対象としたXMLの方がよいと言います。これは、このデータファイルの問題を正確に解決するものではありませんが、将来的には役立つかもしれません。 JSONはこれもよく知られているデータ形式の別のオプションです。

Files.lines()は入力ファイルをストリームに分割しますが、ストリームを4つのアイテムのグループで処理する必要があります。ストリームは並列化可能であると想定されており、特に必要なのはそれに適していません。

このファイルをフラットファイルデータベースとして使用する場合、長期的には、XMLまたはJSONなどの構造化された形式に永続的に変換するプログラムを作成する方がよいでしょう。ストリーム経由でXMLまたはJSONデータにアクセスします。

関連する問題