2016-09-30 14 views
2

ストリームについて少し習得し、ループの代わりに使用できることがわかっています。このおもちゃの例では、グラフデータベースを使用して一連の文字列を格納しています。 dBはそれらを頂点として保存します。これらの頂点を取得し、代わりにストリームを使用してそれらをストリングに変換したいと思います。各頂点には一連のプロパティがあります。私はそれに鍵を与え、それは価値を返す。頂点が私が探しているプロパティを持っているなら、それをリストに追加します。私が頂点iDを格納していない場合。forループをストリームに変換するには

私はforループがありますが、代わりにストリームを使用する方法がわかりません。コードは次のとおりです。

public List<String> getItems() throws Exception { 
    Iterable<Vertex> myNodes = graph.getVertices(); 

    List<String> myItems = new ArrayList<>(); 

    // maybe there is a way to use stream API instead? 
    for(Vertex v : myNodes) 
    { 
     String value = v.getId().toString(); 
     if(v.getPropertyKeys().contains(key)) 
     { 
     value = v.getProperty(key); 
     } 

     myItems.add(value); 
    } 

    return myItems; 
    } 

答えて

1

Sagar Rohankarは、回答で指摘されているとおり、IterableからSpliteratorを取得する必要があります。

return StreamSupport.stream(graph.getVertices().spliterator(), false) 
    .map(v -> v.getPropertyKeys().contains(key) ? v.getProperty(key) : v.getId().toString()) 
    .collect(Collectors.toList()); 
0

このSOスレッドをご覧ください。 Convert Iterable to Stream using Java 8 JDK

要するに、StreamSupport#streamを使用し、spliteratorを渡してから、mapを使用して文字列に変換する必要があります。

0

あなたはStreamSupportをleveragaeできます。これを行うには、ストリームに反復可能オブジェクトを変換する必要があります。そして、あなたのタスクは、単純なワンライナーです。

この投稿は、あなたがこのようなものを使用することができます素敵な説明 Why does Iterable<T> not provide stream() and parallelStream() methods?

を持っている:

StreamSupport.stream(graph.getVertices().spliterator(),false) 
    .map(g -> g.getProperty(key)) 
    .collect(Collectors.toList()); 
関連する問題