我有以下代码,使用Java 8流API可能会更简单:
List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
List<String> listOfValues= new ArrayList<>();
for (List<String> value: listOfListValues) {
listOfValues.add(String.valueOf(value));
}
return listOfValues;
}
我在SO上搜索了一个解决方案,发现了这一点:
listOfListValues.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
但这与我想要的功能不同。
答案 0 :(得分:6)
您在这里只需要一个“简单” map
:
List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
return listOfListValues.stream()
.map(String::valueOf)
.collect(toList());
}
flatMap
用于将一个Stream
转换为另一个Stream
,如果您需要的条目数少于或少于当前可用的条目,则有意义(或者仅需新映射的listOfListValues.stream()
.flatMap(List::stream) // we want to count all, also those from the "inner" list...
.distinct()
.count()
即可进行过滤/映射/ etc再往下移),例如:
计算所有列表的所有唯一字符串:
listOfListValues.stream()
.flatMap(list -> {
if (list.size() > 3) // in this case we use only some of the entries
return Stream.concat(list.subList(0, 2).stream(), Stream.of("..."));
else
return list.stream();
})
.collect(Collectors.toList());
在一定大小后截断条目:
Map<Key, List<Value>> map = new HashMap<>();
Stream<Value> valueStream = interestedKeys.stream()
.map(map::get)
.flatMap(List::stream);
为多个感兴趣的键拼合地图的值:
def f(x):
try:
date_thr = x.iat[5]
except:
date_thr = x.max()
return date_thr
s = (df.sort_values(['AsOfDate'])
.groupby(['CompanyName', 'FiscalYear'], sort=False)['AsOfDate']
.transform(f))
df['cleanse_filter'] = df['AsOfDate'] < s
print (df)
CompanyName MetricValue AsOfDate FiscalYear cleanse_filter
49 360Networks Inc. -295.945 2001-03-31 2000 True
50 360Networks Inc. 101.992 2001-04-30 2000 True
51 360Networks Inc. 101.992 2001-05-31 2000 True
52 360Networks Inc. 101.992 2001-06-30 2000 True
53 360Networks Inc. 101.992 2001-07-31 2000 True
54 360Networks Inc. 101.992 2001-08-31 2000 False
55 360Networks Inc. 101.992 2001-09-30 2000 False
56 360Networks Inc. 101.992 2001-10-31 2000 False
57 360Networks Inc. 101.992 2001-11-30 2000 False
58 360Networks Inc. 101.992 2001-12-31 2000 False
答案 1 :(得分:4)
无需使用平面图。
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(Scaffold(
body: Center(
child: RaisedButton(
onPressed: _launchURL,
child: Text('Show Flutter homepage'),
),
),
));
}
_launchURL() async {
const url = 'https://flutter.io';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
说明:
listOfListValues.stream()
.map(String::valueOf)
.collect(Collectors.toList());
函数结合了flatMap
和map
操作。不需要。展平意味着将flat
转换为[ [1,2,3],[4,5,6,7],[8,9] ]
,即将2D数组转换为1D数组。
答案 2 :(得分:2)
您可以这样做
listOfListValues.stream().map(List::toString).collect(Collectors.toList());
答案 3 :(得分:0)
您可以在此处使用flatMap:
List<List<Integer>> listOfLists = new ArrayList<>();
listOfLists.add(Arrays.asList(1,2,3,4,5));
listOfLists.add(Arrays.asList(10,20,30,40));
listOfLists.add(Arrays.asList(100,200,300,400));
System.out.println(listOfLists);
List<Integer> collect = listOfLists.stream().flatMap(Collection::stream).collect(Collectors.toList());
System.out.println(collect);
输出为: [[1、2、3、4、5],[10、20、30、40],[100、200、300、400]]
[1、2、3、4、5、10、20、30、40、100、200、300、400]