我试图比较和打印getprice()的每一行的唯一值,如下所示:
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。
//对象如下:
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} ;
发布于 2019-11-28 21:35:49
由于您显然希望使用Java8 Stream
API,一种解决方案可能是按price
对列表进行分组,然后使用List.size() >= 1
筛选返回的值Collection
,因为我假设每种类型都应该有一个价格,如果不是,我们可以忽略它。
然后再次流price List
并执行findFirst();
这里有一个例子:
models.stream().collect(Collectors.groupingBy(Model::getPrice)).values().stream()
.filter(modelWrapperList -> modelWrapperList.size() >= 1).forEach(modelList -> {
modelList.stream().findFirst().ifPresent(results::add);
});
但是,一个简单得多的解决方案是跟踪您已经添加的prices
,并根据它筛选您的List
。
另一个例子是:
Set<Integer> existingPrices = new HashSet<>();
results = models.stream().filter(model -> existingPrices.add(model.getPrice()))
.collect(Collectors.toList());
https://stackoverflow.com/questions/59095526
复制相似问题