首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List作为一个对象字段-如何通过Stream (Java 8)处理它?

List作为一个对象字段-如何通过Stream (Java 8)处理它?
EN

Stack Overflow用户
提问于 2017-09-13 23:40:41
回答 2查看 90关注 0票数 1

有一个Waybill对象,它有一个Set字段,Packing对象有一个Set字段。我得到了一个List。需要从整个计算出所有包装的总成本。如何胜任通过流?谢谢。

代码语言:javascript
复制
class Waybill {
    Set<Packing> setOfPacking;
}

class Packing {
    int PRICE;
}

List<Waybill> allWaybills = ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-13 23:57:37

代码语言:javascript
复制
import java.util.stream.*

List<Waybill> allWaybills = ...
int totalCost = allWaybills
    .stream()
    .mapToInt(w -> w.setOfPacking
        .stream()
        .mapToInt(p -> p.PRICE)
        .sum()
    )
    .sum();
票数 0
EN

Stack Overflow用户

发布于 2017-09-14 00:42:07

这对我起了作用:

代码语言:javascript
复制
double total = allWaybills.stream()
    .flatMap(waybill -> waybill.setOfPacking.stream())
    .mapToInt(packing -> packing.PRICE)
    .sum();

我认为这更容易推理,因为没有任何多层次的流操作。

我想了解如何使用flatMapToInt将flatMap和map操作替换为一个操作,而不使其成为多级操作。

下面是一个测试程序:

代码语言:javascript
复制
import java.util.Set;
import java.util.List;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class HelloWorld
{
    public static class Packing
    {
        public int PRICE = 0;
    }

    public static class Waybill
    {
        public Set<Packing> setOfPacking = new HashSet<Packing>();
    }

    public static void main(String []args){
        List<Waybill> allWaybills = new ArrayList<Waybill>();

        Waybill w1 = new Waybill();
        Packing p1 = new Packing(); p1.PRICE = 1; w1.setOfPacking.add(p1);
        Packing p2 = new Packing(); p2.PRICE = 2; w1.setOfPacking.add(p2);
        allWaybills.add(w1);

        Waybill w2 = new Waybill();
        Packing p3 = new Packing(); p3.PRICE = 3; w2.setOfPacking.add(p3);
        Packing p4 = new Packing(); p4.PRICE = 4; w2.setOfPacking.add(p4);
        allWaybills.add(w2);

        double total = allWaybills.stream()
            .flatMap(waybill -> waybill.setOfPacking.stream())
            .mapToInt(packing -> packing.PRICE)
            .sum();

        System.out.println("total = "+total);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46208355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档