从对象数组中获取属性的值

时间:2018-03-21 08:20:48

标签: java java-8 java-stream

我有一个对象列表:

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

在Java 8中提取SKU数组的最佳方法是什么? e.g:

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

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

4 个答案:

答案 0 :(得分:6)

由于您使用的是Java 8,stream api可以帮助您:

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

答案 1 :(得分:2)

尝试使用stream java 8:

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

答案 2 :(得分:2)

同样在Java 8中,您可以使用map

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

答案 3 :(得分:0)

它与开始集合结束结构不同,但您的基本代码应如下所示:

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

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

对于您的结束结构,请调整是否需要HashSet(ArrayList::new)或链接列表(HashSet::new)而不是LinkedList::new

如果您有许多项目变体并且您想以任何顺序快速收集他们的Skus,请考虑并行流处理,将parallel()添加到{{1}功能:

stream()