繁体   English   中英

Java 8-如何将Pojo转换为其嵌入式Pojo属性的列表

[英]Java 8 - How convert Pojo into list of its embedded Pojo property

我有一个数据库调用,如果不符合任何条件,则可能返回null。 如果存在记录匹配,则结果为Pojo,其中包含嵌入对象的列表。 我想将该Pojo转换为其嵌入式对象ID的列表。

Foo.class有酒吧列表

public class Foo {
    private List<Bar> bars;
    //..setters & getters
}

Bar.class,我想将Foo转换为Bar的ID列表

public class Bar {
    Integer id
    //..setters & getters
}

我厌倦了使用Optional,但是它总是返回到酒吧列表

Optional.ofNullable(fooRepo.search("some foo"))
    .map(foo -> foo.getBars()); //How can turn this into list of Bar's Id 

我不确定我是否理解您的问题,但我将其解释为:

数据库查询可以返回一个对象,该对象包含对另一个对象的引用列表,如果没有返回引用,则返回null。 如何将该对象(或null)转换为引用对象的值列表。 如果查询返回空值,我想要一个空列表。

如果您的问题正确无误,那么我建议:

Optional<Foo> possibleFoo = Optional.ofNullable(dbQuery());
List<Integer> ids = possibleFoo
    .map(f -> f.bars.stream()
        .map(b -> b.id)
        .collect(Collectors.toList()))
    .orElse(Collections.EMPTY_LIST);

干得好:

Optional.ofNullable(foo).map(Foo::getBars).map(y -> y.stream().map(z -> z.id).collect(Collectors.toList()))

完整的测试代码:

public class Test {
    public static class Bar {
        public Bar(Integer id) {
            this.id = id;
        }

        Integer id;
    }

    public static class Foo {
        private List<Bar> bars = new ArrayList<>();

        public List<Bar> getBars() {
            return bars;
        }
    }

    public static void main(String[] argb) {
        Foo nullFoo = null;
        Optional<List<Integer>> nullList = convertToIdList(nullFoo);
        System.out.println(nullList); // Optional.empty

        Foo notNullFoo = new Foo();
        notNullFoo.getBars().add(new Bar(3));
        notNullFoo.getBars().add(new Bar(4));
        notNullFoo.getBars().add(new Bar(5));
        Optional<List<Integer>> notNullList = convertToIdList(notNullFoo);
        System.out.println(notNullList); // Optional[[3, 4, 5]]
    }

    private static Optional<List<Integer>> convertToIdList(Foo foo) {
        return Optional.ofNullable(foo).map(Foo::getBars).map(y -> y.stream().map(z -> z.id).collect(Collectors.toList()));
    }
}

关键是将列表本身视为Optional,但是如果存在的话,则将单个列表从一种元素类型转换为另一种元素类型。 请让我知道,如果你有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM