跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Java stream 如何优雅处理这种数据
未分類
31 12 月 2020

Java stream 如何优雅处理这种数据

Java stream 如何优雅处理这种数据

資深大佬 : mmdsun 6

[{

 "bookName": "1",   "bookTypeId": "",   "attr": {    "typeId": "type-a"   }  },    {   "bookName": "2",   "bookTypeId": "",   "attr": {    "typeId": "type-b"   }  } 

]

需要把 attr 对象中的 typeid 设置到外面 bookid 中,attr 对象可能为空,返回还是 List<Book>。类似于这种伪代码。请问这种怎么优雅实现。

List<Book> collect = json.getBookList()              .stream()              .map(m -> m.setBookTypeId(m.getAttr().getTypeId())).collect( 

大佬有話說 (14)

  • 資深大佬 : beichenhpy

    你这样写挺好的

  • 資深大佬 : canbingzt

    json.getBookList()
    .stream()
    .filter(m -> m.getAttr() != null)
    .forEach(m -> m.setBookTypeId(m.getAttr().getTypeId()))

  • 主 資深大佬 : mmdsun

    @beichenhpy 不行。。我这样写要把 setBookTypeId 方法给改了返回 Book 才行,现在 set 方法返回的是 void,而且 getAttr().getId 会报空指针。

  • 資深大佬 : xgfan

    json.getBookList()
    .stream()
    .filter(m -> m.getAttr() != null &&m.getAttr().getTypeId()!=null )
    .peek(m -> m.setBookTypeId(m.getAttr().getTypeId()))

  • 資深大佬 : Rwing

    C#欢迎您

    var result = json.BookList
    .Where(b=>b.attr != null)
    .Select(b=>{ bookTypeId=b.attr.typeId; return b; })
    .ToList();

  • 資深大佬 : taogen

    @canbingzt #2
    @xgfan #4

    Don’t do that. If you use a functional pattern, do not bring any imperative/procedural stuff in it. The purpose of map is to transform an object into another object. It’s meant to be purely functional (side-effect free) by design.

  • 資深大佬 : taogen

    If we want to process this data in parallel, we are going to distribute it among all the cores of our processors and we do not want to have any kind of visibility or synchronization issues that could lead to bad performances or errors. Avoiding this kind of interference means that we shouldn’t modify the source of the data while we’re processing it.

  • 資深大佬 : luban

    @mmdsun 可以让 set 方法返回 this

  • 資深大佬 : yuhuan66666

    这个赋值位置不能用 map map 要求返回一个新对象,但你的需求实际上是在原对象上添加元素 应该用 peek

  • 資深大佬 : yuhuan66666

    看一下 《 java8 实战》对 stream 讲用法还不错

  • 資深大佬 : liuxey

    松散结构直接 stream 操作想想就可怕,NPE 教做人

  • 資深大佬 : xgfan

    @taogen 是的,你是对的。

    ———–
    最好是不要修改原有集合 /集合里的数据。

  • 主 資深大佬 : mmdsun

    json.getBookList()
    .stream()
    .peek(book -> m.getArrt())
    .map(Arrt::getTypeId)
    .ifPresent(book::setBookTypeId))
    .collect()

    感谢大家,已解决。网上找到了类似写法。 明天试试看。
    ( setBookTypeId 需要返回 Book 的 this )

    回 5 c# linq 确实给编程语言贡献了很多。

    @liuxey @yuhuan66666 @luban @canbingzt @beichenhpy @taogen @xgfan

  • 資深大佬 : wysnylc

    @liuxey #11 需要 optional 救你

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具