问题描述
我正在尝试修改存储在 ArrayList 中的字符串。 这不仅仅是打印修改后的列表。 修剪后,列表将进一步向下推送到系统。
我提出的解决方案是有效的,但我想知道我是否正在使用 Java 8 Streams 的全部潜力。
工作(但远非完美)解决方案:
import static java.util.stream.Collectors.toList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
ArrayList<List<String>> listOfListsOfStrings = new ArrayList<>();
listOfListsOfStrings.add(Arrays.asList("abc ", "bd ", " asd ", "s"));
listOfListsOfStrings.add(Arrays.asList("123 ", "45 ", " 753 ", "111"));
listOfListsOfStrings.add(Arrays.asList("sdfg2 ", "b23d ", " as123d ", "1s1"));
ArrayList<List<String>> newListOfLists = new ArrayList<>();
for (List<String> listOfStrings : listOfListsOfStrings) {
List<String> newList = listOfStrings.stream().map(String::trim).collect(toList());
newListOfLists.add(newList);
}
listOfListsOfStrings.forEach(list -> list.forEach(System.out::println));
System.out.println("------------------");
newListOfLists.forEach(list -> list.forEach(System.out::println));
}
}
1楼
我认为你在追求这个:
ArrayList<List<String>> newListOfLists = listOfListsOfStrings.stream()
.map(list -> list.stream()
.map(String::trim)
.collect(Collectors.toList()))
.collect(Collectors.toCollection(ArrayList::new));
我假设您不允许修改原始列表列表。 如果是,您可以获得单行(即使不使用流 API):
listOfListsOfStrings.forEach(list -> list.replaceAll(String::trim));