首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我尝试访问下一行,并使用stream.reduce.not与java arraylist对象中的当前行进行比较,从而获得错误。

我尝试访问下一行,并使用stream.reduce.not与java arraylist对象中的当前行进行比较,从而获得错误。
EN

Stack Overflow用户
提问于 2019-11-28 20:01:57
回答 1查看 51关注 0票数 0

我试图比较和打印getprice()的每一行的唯一值,如下所示:

代码语言:javascript
运行
复制
List<Model> results = lists.stream()
    .reduce((c1,c2) -> c1.getprice() != c2.getprice()? c1:c2)
    .collect(Collectors.toList());

  //The Object is like this:

      object[{type:1,price:20},
             {type:2,price:30}
             {type:3,price:30}
             {type:4,price:60}
            ];
  //OUTPUT expected after reducing the duplicate value of price

//object[{type:1,price:20},{type:2,price:30},{type:4,price:60}
            ];

我试着比较和打印唯一的价值,从每一行从数组,这是getprice。

//对象如下:

代码语言:javascript
运行
复制
  object[{type:1,price:20},
         {type:2,price:30}
         {type:3,price:30}
         {type:4,price:60}
        ];

减价后的预期产量

对象{type:1,price:20},{type:2,price:30},{type:4,price:60} ;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 21:35:49

由于您显然希望使用Java8 Stream API,一种解决方案可能是按price对列表进行分组,然后使用List.size() >= 1筛选返回的值Collection,因为我假设每种类型都应该有一个价格,如果不是,我们可以忽略它。

然后再次流price List并执行findFirst();

这里有一个例子:

代码语言:javascript
运行
复制
models.stream().collect(Collectors.groupingBy(Model::getPrice)).values().stream()
        .filter(modelWrapperList -> modelWrapperList.size() >= 1).forEach(modelList -> {
  modelList.stream().findFirst().ifPresent(results::add);
});

但是,一个简单得多的解决方案是跟踪您已经添加的prices,并根据它筛选您的List

另一个例子是:

代码语言:javascript
运行
复制
Set<Integer> existingPrices = new HashSet<>();

results = models.stream().filter(model -> existingPrices.add(model.getPrice()))
        .collect(Collectors.toList());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59095526

复制
相关文章

相似问题

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