2017-06-05 7 views
3

私は何かする必要のあるものを見つけ続けますが、すべて一緒に配置するのに問題があります。私は何をする必要があることObject1のリストから始まる、あるマップを持つオブジェクトのリストをプリミティブの配列に変換する

Object1 
    Object2 
     Map<String, Double> 

、特定のキーを指定されたマップの値についてdouble[](内のすべてのオブジェクトを取得します:ここに簡単に言えば、私の目的である、開始するにはマップには同じN個のキーがあります)。

myList.stream().map(Object1::getObject2).map(Object2::getMyMap).map(m -> m.get(key).collect(Collectors.toCollection(ArrayList::new)) 

私はここからプリミティブ配列に取得するかどうかはわかりません。ここで

は私の出発しようとしました。これが今のところいいのなら、ここからどこに行くの?このすべてのことを行うためのより良い方法があれば、私は提案に開放されています。どんな助けもありがとう、ありがとう。

答えて

7

使用.mapToDoubleDoubleStreamを作る:

`null`なので値との慎重な
myList.stream() 
    .map(Object1::getObject2) 
    .map(Object2::getMyMap) 
    .mapToDouble(m -> m.get(key)) // or throw if key is not in map 
    .toArray(); 
+1

。 – lexicore

+3

フィルター(d - > d!= null).mapToDouble(Double(double - ))。 :: doubleValue).toArray() ' – Andreas

+2

OPの説明によれば、おそらく投げが適切です。マップの1つに 'key'がない場合、データは無効で、短い配列を返すのではなく、コードが速く失敗するはずです。 – Misha

関連する問題