2017-12-09 7 views
0

を使用して別のリストに保存する私は、これらのフィールドを持つクラスを持っているリストから特定のキーを取得し、ストリーム

私は持っているだろう、新しいリストを作成する必要があり
class ListA { 
    Long id 
    double lat 
    doubel lon 
    Timestamp timestamp 
} 

lat, lon

class LatLng { 
    double lat 
    double lon 
} 

方法Javaのストリームを使ってこれを行うことはできますか?

これはnative forループを使用して実行できます。しかし私はストリームを使ってそれをすることを学びたい。

List<ListA> listAs = this.dao.findAll(); 

List<LatLng> latLngs = new ArrayList(); 
for (ListA listA : listAs) { 
    LatLng latLng = new LatLng(listA.getLat(), listA.getLon()); 
    latLngs.add(latlng) 
} 

ListAからlatとlonを抜き出してLatLngに保存したいだけです。

+2

どのようにだろうループでやりますか?コード例を追加してください。 – Andrew

+0

ループまたはストリームを使用する前に、フィルタリング基準を指定する必要があります。どのルールが保持したいアイテムを指定していますか?また、私はリストに文字列の値だけが含まれているとは思わない...あなたは本当にこれまでに書いたリストとコードの実際の定義を表示する必要がある。 –

+0

質問が更新されました。申し訳ありませんが、私は人々が理解するだろうと思った。 – nirvair

答えて

1

あなたがこれを行うことができます:変数を保存するために

List<ListA> listAs = this.dao.findAll(); 

List<LatLng> latLngs = listAs.stream() 
       .map(listA -> new LatLng(listA.getLat(), listA.getLon())) 
       .collect(Collectors.toList()); 

、あるいはこれを:

List<LatLng> latLngs = this.dao.findAll().stream() 
       .map(listA -> new LatLng(listA.getLat(), listA.getLon())) 
       .collect(Collectors.toList()); 
-1

これは、サイズ== 3でフィルタリングすることで可能です。これは、これらの2つの識別子であるためです。もちろん、他の特性をフィルタリングすることもできます。

final List<String> newItems = items.stream() 
            .filter(s -> s.length() == 3) 
            .collect(Collectors.toList()); 

UPDATE:より良いソリューション...

final List<String> newItems = items.stream() 
      .filter(s -> "lat".equals(s) || "lon".equals(s)) 
      .collect(Collectors.toList()); 
+0

...リストに 'id、lat、lon、alt、timestamp'が含まれるまで。長さのフィルタリングは間違っています。 –

+0

私はこの回答を現在のバージョンに変更する前に作成しました。クラスはそれから問題にはなりませんでした... – Ivonet

関連する問題