当前位置: 代码迷 >> java >> 使用 Java 8 Streams 修改列表中的字符串列表
  详细解决方案

使用 Java 8 Streams 修改列表中的字符串列表

热度:90   发布时间:2023-08-02 11:03:43.0

我正在尝试修改存储在 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));

    }
}

我认为你在追求这个:

    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));
  相关解决方案