使用Java 8 Streams在列表内修改字符串列表

时间:2019-02-19 10:31:47

标签: java java-stream

我正在尝试修改存储在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 个答案:

答案 0 :(得分:0)

我认为您是在追求这一点:

    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));