java - 如何在 java 流中映射超过 1-1 条记录?

标签 java java-8 java-stream

我有一个 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());

最佳答案

使用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());

关于java - 如何在 java 流中映射超过 1-1 条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36026999/

相关文章:

java - ForkJoinPool、Phaser 和托管阻塞 : to what extent do they works against deadlocks?

java - 如何从 java 8 中的双重嵌套映射中收集对象?

java - Tomcat 未处理 jSTL ${}

java - 如何从一组对象生成组合?

Java8 整数流与 IntStream

java-8 - 收藏集与加入Java 8

java - 可以在不破坏管道的情况下封装中间流操作吗?

java - 如何在单独的模块中加载多个 Spring ApplicationContext XML?

java - 无法为 Kafka 流打开存储,因为状态无效

java - 远程运行时 Swing JDialog 速度缓慢