加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java8:Stream在同一个流中映射两个属性

发布时间:2020-12-14 23:59:48 所属栏目:Java 来源:网络整理
导读:我有一个带有以下签名的类Model: class Model { private String stringA; private String stringB; public Model(String stringA,String stringB) { this.stringA = stringA; this.stringB = stringB; } public String getStringA() { return stringA; } pu
我有一个带有以下签名的类Model:
class Model {
        private String stringA;
        private String stringB;

        public Model(String stringA,String stringB) {
            this.stringA = stringA;
            this.stringB = stringB;
        }

        public String getStringA() {
            return stringA;
        }

        public String getStringB() {
            return stringB;
        }
}

我想映射List< Model>到列表< String>在单个流中包含stringA和stringB

List<String> strings = models.stream()
                .mapFirst(Model::getStringA)
                .thenMap(Model::getStringB)
                .collect(Collectors.toList());

要么:

List<String> strings = models.stream()
                .map(Mapping.and(Model::getStringA,Model::getStringB))
                .collect(Collectors.toList());

当然,他们都没有编译,但你明白了.

它有可能吗?

编辑:

例:

Model ab = new Model("A","B");
Model cd = new Model("C","D");
List<String> stringsFromModels = {"A","B","C","D"};

解决方法

您可以一个接一个地列出所有值,如下所示:
List<String> resultSet =
               modelList.stream()
                        .flatMap(e -> Stream.of(e.getStringA(),e.getStringB()))
                        .collect(Collectors.toList());

传递给flatMap的函数将应用于每个元素,从而产生Stream< String>.这里需要使用flatMap来折叠所有嵌套的Stream< Stream< String>>到一个流< String>因此,我们可以将元素收集到List< String>中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读