我有一个MyModel
班级和一个List<MyModel>
public static class MyModel{
private int left;
private int right;
private int state = 0;
public MyModel(int left, int right, int state){
this.left = left;
this.right = right;
this.state = state;
}
public int getLeft() {
return left;
}
public void setLeft(int left) {
this.left = left;
}
public int getRight() {
return right;
}
public void setRight(int right) {
this.right = right;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
我希望制作,MyModel
会映射1或2个整数值(左,右或两者)
我可以做1但不知道怎么做2
这就是我目前的做法:
List<MyModel> models = new ArrayList<MyModel>();
models.add(new MyModel(1, 2, 1));
models.add(new MyModel(3, 4, 2));
models.add(new MyModel(5, 6, 3));
List<Integer> result = models.stream().map(p -> {
switch (p.getState()) {
case 1:
return p.getLeft();
case 2:
return p.getRight();
case 3:
//Problem here i need add left and right into result list
default:
return p.getLeft();
}
}).collect(Collectors.toList());
答案 0 :(得分:7)
使用flatMap
,它完全符合您的需要:
List<Integer> result = models.stream().flatMap(p -> {
switch (p.getState()) {
case 1:
return Stream.of(p.getLeft());
case 2:
return Stream.of(p.getRight());
case 3:
return Stream.of(p.getLeft(), p.getRight());
default:
return Stream.of(p.getLeft());
// you can also return Stream.empty() if appropriate
}
}).collect(Collectors.toList());
答案 1 :(得分:3)
您可以使用Collector API:
sort