上表中有四条记录;如何获得具有唯一ID的结果,并使用Java 8流按创建时间排序最新记录。
在这个例子中;我想只看到两个这样的记录:
6838322 45210 2018-03-08 06:07
和
6838320 45209 2018-03-08 05:50
答案 0 :(得分:1)
yourObjects.stream()
.collect(Collectors.toMap(
YourObject::getId,
YourObject::getCreationTime,
BinaryOperator.maxBy(Comparator.comparing(Function.identity())
))
其中YourObject
实际上是您拥有的java中的对象,getCreationTime
会返回Date
Comparable
。
答案 1 :(得分:-1)
您可以按创建时间对流进行排序,并在id上应用记录的相等性(以便您可以使用distinct)。以下是代码:
public class StreamStuff {
public static void main(String[] args) {
List<Data> datas = Arrays.asList(new Data(6838322, new Date()), new Data(6838320, new Date(1520574131111L)),
new Data(6838320, new Date(1520574136940L)), new Data(6838320, new Date(324324353999L)));
datas.stream()
.sorted((d1, d2) -> d2.creationTime.compareTo(d1.creationTime))
.distinct()
.forEach(System.out::println);
}
}
class Data {
int id;
Date creationTime;
public Data(int id, Date creationTime) {
super();
this.id = id;
this.creationTime = creationTime;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Data other = (Data) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Data [id=" + id + ", creationTime=" + creationTime + "]";
}
}