如何组合嵌套列表中的所有字符串?

Fre*_*ind 4 list fold dart

我有一个列表,其中包含多级嵌套列表.每个列表都可以包含字符串和其他类型实例.

例如

var list = [ 'a', 'w', ['e', ['f', new Object(), 'f'], 'g'], 't', 'e'];
Run Code Online (Sandbox Code Playgroud)

我想编写一个函数(比如说compress)来组合字符串和它们的兄弟,并保持其他类型实例不变,最后得到一个没有嵌套列表的列表.

compress(list){//怎么样?}

结果compress(list)将是:

['awef', new Object(), 'fgte']
Run Code Online (Sandbox Code Playgroud)

这是快速而明确的解决方案吗?

Gre*_*owe 5

Terse和功能性FTW

List compress(Iterable iterable) => concat(flatten(iterable));

Iterable flatten(Iterable iterable) => 
    iterable.expand((e) => e is Iterable ? flatten(e) : [e]);

List concat(Iterable iterable) => iterable.fold([], (list, e) => 
    list..add((e is String && list.isNotEmpty && list.last is String)
        ? list.removeLast() + e : e));
Run Code Online (Sandbox Code Playgroud)