我想在main方法中将for循环更改为stream包含。
这是我的主要方法
List<Model1> list = new ArrayList<>();
List<Model2> model = Stream.iterate(0, n -> n + 1).limit(10).map(m -> new Model2(m))
.collect(Collectors.toList());
List<Model2> model2 = Stream.iterate(11, n -> n + 1).limit(10).map(m -> new Model2(m))
.collect(Collectors.toList());
list.add(new Model1("a", model));
list.add(new Model1("b", model2));
List<Model3> list3=new ArrayList<>();
for(Model1 m:list) {
for(Model2 m2: m.getModel()) {
Model3 m3=new Model3();
m3.setStr(m.getS1());
m3.setValue(m2.getVal());
list3.add(m3);
}
}
list3.stream().forEach(s->
System.out.println(s.getStr()+"::"+s.getValue()));
下面是我的模型类
public class Model1 {
private String s1;
private List<Model2> model;
// getter setter
}
我的下一个模特
public class Model2 {
private Integer val;
//getter setter
}
我想要设置数据的模型
public class Model3 {
private String str;
private Integer value;
// getter setter
}
我的main方法的输出将是:
a::0
a::1
a::2
a::3
a::4
a::5
a::6
a::7
a::8
a::9
b::11
我希望使用Java流
输出相同的输出答案 0 :(得分:3)
你可以这样做:
list.stream()
.flatMap(m->m.getModel().stream().map(m2->new Model3(m.getS1(),m2.getVal())))
.collect(Collectors.toList()); // or .collect(Collectors.toCollection(ArrayList::new))
答案 1 :(得分:1)
如果您只想打印值而不将数据复制到Model3中,可以使用以下代码
list.forEach(m -> m.getModel().forEach(m2 -> System.out.println(m.getS1() + "::" + m2.getVal())))