出于某种原因,我无法解决如何使用流将这个深层嵌套列表转换为新列表的问题.
every A in List<A> contains ->
List<B> where every B contains ->
List<C> where every C contains -> List<String>
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的迭代,如:
List<String> newlist = listA.getB()
.stream()
.filter(b -> b.getC()
.stream()
.filter(c -> c.getPeople)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
我充满了困惑......我可以通过for循环轻松完成这项工作,但我听说流简单易用,我想开始更多地使用它们.
我一直在练习算法,递归总是我的弱点.此问题要求将嵌套数组展平为单个数组.如果使用给出O(n ^ 3)[给定相同大小的3d数组]解决方案的循环,这将是简单的.
然而,随着递归我一直在努力几个小时.这就是我所拥有的,请注意我已经尝试了我的代码尝试不同的解决方案,这正是我决定留下来发布给你们的人.
我想要的是两件事,无论如何要修复我当前的代码以获得正确的输出,并且有一种更简单,更简洁的方式来使用递归编写此代码,谢谢!
奖金问题,如果我不知道嵌套数组的维度,那么我将如何使用递归来解决这个问题?
编辑 好吧经过一些硬编码(我不想这样做)后,我设法让这个工作.但是代码现在是硬编码而且非常混乱,无论如何都要清理代码或者使用递归来解决这个问题的简单方法?
EDIT2 我正在尝试使用辅助方法递归重做此问题.我会看看我是否有更好的运气使用这种风格
import java.io. * ;
import java.util. * ;
class Solution {
// static int oneLen = 0;
//static int twoLen = 0;
//static int threeLen = 0;
static int oneCnt = 0;
static int twoCnt = 0;
static int threeCnt = 0;
static ArrayList < Integer > result = new ArrayList < Integer > ();
public static ArrayList < Integer > flatten(int [][][] arr){
if (oneCnt < arr[threeCnt][twoCnt].length && !(oneCnt …Run Code Online (Sandbox Code Playgroud) java ×3
arrays ×1
collections ×1
generics ×1
java-stream ×1
lambdaj ×1
recursion ×1
type-safety ×1