【问题标题】:Get values of a property from array of objects [duplicate]从对象数组中获取属性的值[重复]
【发布时间】:2018-08-30 06:33:44
【问题描述】:

我有一个对象列表:

[class RetailerItemVariant {
    sku: 008884303996
    isAvailable: true
    price: 70.0
}, class RetailerItemVariant {
    sku: 008884304030
    isAvailable: true
    price: 40.0
},
...

在 Java 8 中提取 SKU 数组的最佳方法是什么?例如:

["008884303996", "008884304030", ...]

我是 Java 新手,这在 Javascript 中使用 map() 函数非常简单,但我无法在 Java 中找到类似的简单方法...

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    由于您使用 Java 8,stream api 可以在这里为您提供帮助:

    List<String> skus = itemList.stream()
              .map(Item::getSku)
              .collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      在 Java 8 中也有 map 你可以使用:

      List<String> listSku = listRetailerItemVariant.stream()
                             .map(RetailerItemVariant::getSku)
                             .collect(toList());
      

      【讨论】:

        【解决方案3】:

        尝试使用流 java 8:

        List<String> listSku = list.stream().map(r->r.getSku())
                                .collect(Collectors.toList())
        

        【讨论】:

          【解决方案4】:

          它与您的 start 集合 和您的 end 结构 不同,但您的基本代码应如下所示:

          mylist
               .stream()
               .map(variant -> variant.getSku())
               .collect(Collectors.toCollection(ArrayList::new)))
          

          作为起始结构,如果您使用数组而不是集合,则从 myList.stream 移动到 Stream.of(variantArray).map()

          至于你的最终结构,如果你想要一个 HashSet (HashSet::new) 或链表 (LinkedList::new) 而不是 ArrayList::new,请调整

          如果您有很多很多的商品变体,并且您希望以任意顺序快速收集它们的 Sku,请考虑通过将 parallel() 添加到 stream() 函数来并行流处理

          mylist
               .stream()
               .parallel() // for parallel processing
               .map(variant -> variant.getSku())
          

          【讨论】:

            猜你喜欢
            • 2012-12-07
            • 2015-06-10
            • 1970-01-01
            • 2015-04-05
            • 1970-01-01
            • 2021-11-17
            • 1970-01-01
            相关资源
            最近更新 更多