Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java lambda对列中不同值的值进行分组_Java_For Loop_Lambda - Fatal编程技术网

使用java lambda对列中不同值的值进行分组

使用java lambda对列中不同值的值进行分组,java,for-loop,lambda,Java,For Loop,Lambda,我有一个目标: 带三列的QuoteProductTo(名称、值1、值2) List lstQuoteProductDTO=newarraylist(); lstQuoteProductTo.添加(新的QuoteProductTo(“产品”),10,15.5); lstQuoteProductTo.添加(新的QuoteProductTo(“产品”,05,2.5)); lstQuoteProductTo.添加(新的QuoteProductTo(“产品”,13,1.0)); lstQuoteProdu

我有一个目标:

带三列的QuoteProductTo(名称、值1、值2)

List lstQuoteProductDTO=newarraylist();
lstQuoteProductTo.添加(新的QuoteProductTo(“产品”),10,15.5);
lstQuoteProductTo.添加(新的QuoteProductTo(“产品”,05,2.5));
lstQuoteProductTo.添加(新的QuoteProductTo(“产品”,13,1.0));
lstQuoteProductTo.添加(新的QuoteProductTo(“产品”,02,2.0));
我需要获得一个合并(一个新对象QuoteProductTo):

在第一列名称中,我必须获得第一个值“product”

第二个(值1)我必须得到最大值13


第三列我需要得到所有值的总和20。

这将获取提供的当前数据,并使用所需数据生成一个新对象。它使用Java12的
Collectors.teeing()
方法+

鉴于以下数据:

        ArrayList<QuoteProductDTO> lstQuoteProductDTO = new ArrayList<>();
        ArrayList<QuoteProductDTO> nextQuoteProductDTO = new ArrayList<>();

        // empty Quote for Optional handling below.
        QuoteProductDTO emptyQuote = new QuoteProductDTO("EMPTY", -1, -1);

        lstQuoteProductDTO.add(
                new QuoteProductDTO("Product", 10, 15.5));
        lstQuoteProductDTO.add(
                new QuoteProductDTO("Product", 05, 2.5));
        lstQuoteProductDTO.add(
                new QuoteProductDTO("Product", 13, 1.0));
        lstQuoteProductDTO.add(
                new QuoteProductDTO("Product", 02, 2.0));

印刷品

产品,13,21.0

您还可以获取不同产品的列表,并将其放入合并产品列表中。将以下内容添加到新列表中,然后将其添加到主列表中


        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 10, 15.5));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 25, 20.5));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 13, 1.0));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 02, 2.0));

        List<List<QuoteProductDTO>> list = List.of(
                lstQuoteProductDTO, nextQuoteProductDTO);


你用哪种语言?JAVA“一行”是什么意思?你需要把答案打印在一行上吗?在标题中,您提到lambda,解决方案是否需要使用lambda编写?是的。。。它是java。我在用它。但如果可能的话,我更喜欢用lambda。我需要一个具有合并值的新QuoteProductTo。请参阅
        QuoteProductDTO prod = lstQuoteProductDTO.stream()
                .collect(Collectors.teeing(
                        Collectors.maxBy(Comparator
                                .comparing(p -> p.value1)),
                        Collectors.summingDouble(
                                p -> p.value2),
                        (a, b) -> new QuoteProductDTO(
                                a.orElse(emptyQuote).name,
                                a.orElse(emptyQuote).value1,
                                b.doubleValue())));

        System.out.println(prod);               

        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 10, 15.5));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 25, 20.5));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 13, 1.0));
        nextQuoteProductDTO.add(
                new QuoteProductDTO("Product2", 02, 2.0));

        List<List<QuoteProductDTO>> list = List.of(
                lstQuoteProductDTO, nextQuoteProductDTO);

        List<QuoteProductDTO> prods = list.stream().map(lst -> lst.stream()
                .collect(Collectors.teeing(
                        Collectors.maxBy(Comparator
                                .comparing(p -> p.value1)),
                        Collectors.summingDouble(
                                p -> p.value2),
                        (a, b) -> new QuoteProductDTO(
                                a.orElse(emptyQuote).name, 
                                a.orElse(emptyQuote).value1,
                                b.doubleValue()))))
                .collect(Collectors.toList());

         prods.forEach(System.out::println);
class QuoteProductDTO {
    public String name;
    public int value1;
    public double value2;

    public QuoteProductDTO(String name, int value1,
            double value2) {
        this.name = name;
        this.value1 = value1;
        this.value2 = value2;
    }

    public String toString() {
        return name + ", " + value1 + ", " + value2;
    }
}