マップのキーセットストリームにanyMatch()と述語を適用し、述語がfalseの場合、いくつかの結果を返します

mounaim:

私はクラスの持っているParcelle 3つの属性を持つNUM自然autre_natureをそしてParcelleのリストlistParcelles私は、Java 8ストリームと経験、そして私が達成したいことはNUMによってグループにあると戻るのですParcelle両方の非ヌルあり、自然autre_natureそうでない場合は、単にランダムにグループから1 Parcelleを返し、属性を。

Example :   
Input:   

    ligneParcelles[[num=1,nature=TC,autre_nature=TCC],  
                   [num=1,nature=TC,autre_nature=null],
                   [num=2,nature=TC,autre_nature=null],
                   [num=3,nature=TC,autre_nature=null],
                   [num=3,nature=Alpha,autre_nature=null],
                   [num=4,nature=TC,autre_nature=TC]
                   [num=4,nature=TC,autre_nature=null]]
Output :   
    ligneParcelles [[num=1,nature=TC,autre_nature=TCC],  
                   [num=2,nature=TC,autre_nature=null],
                   [num=3,nature=Alpha,autre_nature=null],
                   [num=4,nature=TC,autre_nature=TC]]

グループ化するために、私は次のコードを使用しました:

Map<String, List<Parcelle>> mapLignesParcelles = listParcelles.stream()                                                    

          .collect(Collectors.groupingBy(lp->lp.getNum()+""));  

しかし、私は最終的な結果を得るために何を使用するかわからない、私はストリーミングすることができmapLignesParcellesキーセットと、私は述語でanymatchと思うlp.getNature()!=null && lp.getAutre_Nature() !=nullが、どのように私は、述語が成立しないとき任意の要素を返すために事実を表現することができますか?

また:

あなたは、各マッピングを探しているように見えるNum単一のParcelle形式でMap<String, Parcelle>はなく、ListのようにgroupingBy一つの方法は、使用しているtoMapとして収集しながら:

Map<String, Parcelle> output = listParcelles.stream()
        .collect(Collectors.toMap(a -> a.getNum() + "", a -> a,
                (parcelle1, parcelle2) -> parcelle1.getNature() != null
                        && parcelle1.getAutre_nature() != null ? parcelle1 : parcelle2));

:グループ化の先駆けとして可能性が道から別の

Map<String, Parcelle> output = mapLignesParcelles.entrySet().stream()
        .map(e -> new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue()
                .stream()
                .filter(lp -> lp.getNature() != null && lp.getAutre_nature() != null)
                .findAny()
                .orElse(e.getValue().get(new Random().nextInt(e.getValue().size())))))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=234351&siteId=1