2014-03-31 33 views
16

我想更改list中的所有項目。
java8做什麼是正確的方法?如何更改java8中的字符串列表中的項目

public class TestIt { 

public static void main(String[] args) { 
    ArrayList<String> l = new ArrayList<>(); 
    l.add("AB"); 
    l.add("A"); 
    l.add("AA"); 
    l.forEach(x -> x = "b" + x); 
    System.out.println(l); 
} 

} 
+1

請記住,在Java 7中有效的所有內容在Java 8中也是有效的。因此有多種正確的方法。 – immibis

回答

34

您可以使用replaceAll

將此列表中的每個元素替換爲將 運算符應用於該元素的結果。

ArrayList<String> l = new ArrayList<>(Arrays.asList("AB","A","AA")); 
l.replaceAll(x -> "b" + x); 
System.out.println(l); 

輸出:

[bAB, bA, bAA] 
14

如果你想使用流,你可以做這樣的事情:

List<String> l = new ArrayList<>(Arrays.asList("AB","A","AA")); 
l = l.stream().map(x -> "b" + x).collect(Collectors.toList()); 
System.out.println(l); 

輸出:

[bAB, bA, bAA] 

當然這是bette如果要更改列表的所有元素,但使用流使您可以輕鬆應用過濾器或並行處理,請使用replaceAll。當列表不可修改時,replaceAll也會修改列表並引發異常,而collect會創建新列表。

+0

你能否解釋一下,爲什麼使用Streams更好?或者說明一下,有什麼不同? – bobbel

+0

我添加了評論。這個想法展示瞭如何使用新的Java 8功能來實現它。正如immibis所說的評論這個問題,有多種正確的方法來實現所要求的。 – Roland

+0

太棒了!感謝您的進一步解釋!這就是我想要達到的:) – bobbel

相關問題