ストリームが空の場合は、別のリストを作成する方法

VextoR:

ストリームが空である場合は、別のリストを作成するための良い方法はありますか?

ここにいる場合はspecial、私は新しいを作成したい空でList別の値で。しかし、場合specialである私が作成したい空ではないListに基づきますspecial私はストリームとこれらを結合する良い方法があるかわかりません

ここではとても素敵ではないソリューションです

class X {
    public static void main(String[] args) {
        String myString = "test";

        List<String> special = getSpecialVals();

        List<String> newVals = 
                special.isEmpty() ? 
                Arrays.asList(myString) : 
                special.stream().map(s -> 
                         createNewVal(s)).collect(Collectors.toList());
    }

    static public List<String> getSpecialVals() {
        // but can return empty list
        return Arrays.asList("One", "Two");
    }

    static public String createNewVal(String origVal) {
        return origVal.toUpperCase();
    }
}
Ousmane D .:

あなたは、単一のパイプラインとしてそれを持っているしたい場合は、あなたが行うことができます:

List<String> strings = 
      Optional.of(special)
              .filter(e -> !e.isEmpty())
              .map(l -> l.stream().map(s -> createNewVal(s))
                                  .collect(Collectors.toList()))
              .orElseGet((() -> Collections.singletonList(myString)));

しかし、私はそれがオプションの使用目的ではありませんという理由だけで、このアプローチを進めてお勧めしません。

その代わり、あなたが持つほうが良いでしょう。

List<String> result;
if(special.isEmpty())
   result = Collections.singletonList(myString);
else
   result = special.stream().map(s -> createNewVal(s)).collect(Collectors.toList());
  • 後者は、それゆえ何が起こっているかを把握しようとしている脳のための少ない作業を起こし間違いなく、より読みやすいです。;)
  • 後者はまた、ことを回避するより良い効率をもたらす任意のインスタンスを作成します

おすすめ

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