基本上如果我有一些映射双功能是这种操作的快捷方式(所以我不必编写3个嵌套循环)?
List<List<List<String>>> collect = list
.stream()
.map(a -> a
.stream()
.map(b -> b
.stream()
.map(String::valueOf)
.collect(Collectors.toList()))
.collect(Collectors.toList()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用一个递归方法,该方法沿着列表树向下,一旦找到一个不是列表的东西(在你的情况下是一个整数)的列表,就会将它转换为一个字符串:
public static List<?> mapToString(List<?> list) {
return list.stream()
.map(x -> {
if (x instanceof List) return mapToString((List) x);
else return String.valueOf(x);
})
.collect(toList());
}
Run Code Online (Sandbox Code Playgroud)
请注意,List<List<List<List<List<List<Integer>>>>>>如果您喜欢那种恐怖,它会适用于它.
缺点是它不是类型安全的,所以你需要一个演员阵容.
例:
public static void main(String... args) throws Exception {
List<List<List<Integer>>> input = new ArrayList<> ();
input.add(new ArrayList<> ());
input.add(new ArrayList<> ());
input.get(0).add(Arrays.asList(1, 2));
input.get(1).add(Arrays.asList(3, 4));
List<List<List<String>>> result = (List<List<List<String>>>) mapToString(input);
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |