Lambda 获取10码列表<;字符串>;从地图<;长,列表<;字符串>&燃气轮机;使用Java8流

Lambda 获取10码列表<;字符串>;从地图<;长,列表<;字符串>&燃气轮机;使用Java8流,lambda,java-8,java-stream,Lambda,Java 8,Java Stream,有数据Set输入和Map存储 我想要10号的单子 Map<Long, List<String>> datas = {...{; Set<Long> input = {....}; List<String> output = new ArrayList<>(); for(Long key : input) { if(output.size() >= 10) break; List<String> tmp

有数据
Set
输入和
Map
存储

我想要10号的单子

Map<Long, List<String>> datas = {...{;
Set<Long> input = {....};
List<String> output = new ArrayList<>();

for(Long key : input) {
    if(output.size() >= 10) break;
    List<String> tmp = datas.get(key);
    for(String val : tmp) {
        if(output.size() >= 10) break;
        output.add(val);
    }
}
Map数据={…{;
设置输入={…};
列表输出=新的ArrayList();
for(长键:输入){
如果(output.size()>=10)中断;
List tmp=datas.get(key);
for(字符串val:tmp){
如果(output.size()>=10)中断;
输出。添加(val);
}
}

我不能在流中使用java 9,但可以使用相应的流管道

List<String> output = input.stream()
    .flatMap(i -> datas.get(i).stream()).limit(10)
    .collect(Collectors.toList());
List output=input.stream()
.flatMap(i->datas.get(i).stream()).limit(10)
.collect(Collectors.toList());
测试:

Map data=newhashmap();
数据输入(1l、数组、asList(“a”、“b”、“c”、“d”、“e”、“f”、“g”));
数据输入(2l,数组,asList(“z”、“y”、“x”、“w”、“v”、“u”、“t”));
Set input=newlinkedhashset(Arrays.asList(1l、2l、3l、4l、5l));
System.out.println(input.stream()
.flatMap(i->datas.get(i).stream()).limit(10)
.collect(Collectors.toList());

打印
[a,b,c,d,e,f,g,z,y,x]

如果这样写,可以循环10000次得到10个大小的列表?@EdgarHan它不会。
限制(10)
将停止它。测试代码(或添加
.peek(System.out::println)
收集之前查看查找了哪些键。如果查找了
输入的所有键,则此代码将引发nullpointerexception。在
之前。peek(System.out::println)
限制(10)
循环执行10次或更多次它是正确的?@ernest\u k它可能会看到,也可能不会看到
“w”
,这是一个实现细节。对于更新222之前的Java 8,以及Java 9,在
限制之前的
peek
甚至会看到
“v”
“u”
、和
“t”
。请参见。对于并行流,即使是由于调用
流()
on
null
可能会发生。依赖惰性不是一个好主意……是的,这只是示例程序的一个问题;对于OP的任务,这种方法就足够了。
Map<Long, List<String>> datas = new HashMap<>();
datas.put(1l, Arrays.asList("a", "b", "c", "d", "e", "f", "g"));
datas.put(2l, Arrays.asList("z", "y", "x", "w", "v", "u", "t"));
Set<Long> input = new LinkedHashSet<>(Arrays.asList(1l, 2l, 3l, 4l, 5l));

System.out.println(input.stream()
        .flatMap(i -> datas.get(i).stream()).limit(10)
        .collect(Collectors.toList()));