2016-03-04 10 views

答えて

12

後者は置換または要素を設定するという概念を持っていないので、これだけではなく、Collectionに、List上で動作します。

しかしList与えられ、それはあなたがList.replaceAll()メソッドを使用してやりたいことが非常に簡単です:

List<String> list = Arrays.asList("a", "b", null, "c", "d", null); 
list.replaceAll(s -> s == null ? "x" : s); 
System.out.println(list); 

は出力:

[a, b, x, c, d, x] 

あなたは述語を取るバリエーションが必要な場合、あなたは可能性がありそれを行うための小さなヘルパー関数を書く:

static <T> void replaceIf(List<T> list, Predicate<? super T> pred, UnaryOperator<T> op) { 
    list.replaceAll(t -> pred.test(t) ? op.apply(t) : t); 
} 

これは次のように呼び出されます:

replaceIf(list, Objects::isNull, s -> "x"); 

同じ結果を与えます。

+0

質問を修正し、清潔でエレガントな答えを与えることに感謝スチュアート。 –

0

これは、この試みることがあります。

list.removeAll(Collections.singleton(null)); 
+1

彼はそれらを取り除きません。 – achabahe

2

をあなたは、単純なマップ機能が必要です。

Arrays.asList(new Integer[] {1, 2, 3, 4, null, 5}) 
.stream() 
.map(i -> i != null ? i : 0) 
.forEach(System.out::println); //will print: 1 2 3 4 0 5, each on a new line 
2

これを試してみてください。

public static <T> void replaceIf(List<T> list, Predicate<T> predicate, T replacement) { 
    for (int i = 0; i < list.size(); ++i) 
     if (predicate.test(list.get(i))) 
      list.set(i, replacement); 
} 

List<String> list = Arrays.asList("a", "b", "c"); 
replaceIf(list, x -> x.equals("b"), "B"); 
System.out.println(list); 
// -> [a, B, c] 
+0

これは良い解決策に見えます –

関連する問題