我在ArrayList中有一个对象列表。我想根据旧的paymentDate删除列表中的重复对象。例如,如果成员(Vishal)重复两次,我需要删除基于旧的Vishal对象来自列表的paymnetDate。
[{CreditCardNum,name,Amount,DueDate,PaymentDate}]
masterlist = [{4123456789123456,Vishal,80000,03/06/2015,07/06/2015},
{4123456789123456,Vivek,80000,07/06/2015,11/06/2015},
{4123456789123456,Vishal,80000,03/06/2015,09/06/2015}];
Removable Object from List =
{4123456789123456,Vishal,80000,03/06/2015,07/06/2015}
List<CreditcardVo> masterlist =new ArrayList<CreditcardVo>();
public class CreditCardVO {
public String creditNumber;
public String name;
public int amount;
public Date dueDate;
public Date paymentDate;
public String getCreditNumber() {
return creditNumber;
}
public void setCreditNumber(String creditNumber) {
this.creditNumber = creditNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public Date getDueDate() {
return dueDate;
}
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}
public Date getPaymentDate() {
return paymentDate;
}
public void setPaymentDate(Date paymentDate) {
this.paymentDate = paymentDate;``
}
}
答案 0 :(得分:1)
以下是您可以使用的算法: 首先,您需要ArrayList中每个对象的唯一标识符。如果您确定该名称不重复,则标识符可以是我的名称。
val
,并将其日期与当前对象curr
的日期进行比较:
val
有最新日期,则不执行任何操作curr
有最新日期,请致电map.put(identifier, curr)
以更新地图中的值map.put(identifier, curr)
将当前对象添加到地图最后,结果将是地图的值。您可以使用map.values()
答案 1 :(得分:0)
您可以创建一个方法:
List<CreditCardVO> getDistinctObjectsByName(List<CreditCardVO> cardVOS){
Collection<CreditCardVO> resultSet =
cardVOS.stream()
.collect(Collectors.toMap(CreditCardVO::getName, Function.identity(),
(left, right) ->
left.getPaymentDate().after(right.getPaymentDate()) ?
left : right
)).values();
return new ArrayList<>(resultSet);
}
给出CreditCardVO
列表的将返回一个包含最新付款日期的不同对象的新列表。