Этот код иллюстрирует все, что вы хотели.Обратите внимание, что методы hashCode, equals и compareTo переопределяются.
package com.pkr.test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class User implements Comparable<User> {
public static SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
private long userId;
private String userName;
private Date createdDate;
public User(long userId, String userName, Date createdDate) {
this.userId = userId;
this.userName = userName;
this.createdDate = createdDate;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public String toString() {
return String.format("userId: %s, userName: %s, createdDate: %s",
new Object[] { userId, userName, sdf.format(createdDate) });
}
public boolean equals(Object o) {
if (o instanceof User) {
return ((User) o).getUserId() == this.getUserId();
}
return false;
}
public int hashCode() {
return new Long(userId).hashCode();
}
@Override
public int compareTo(User o) {
return this.getCreatedDate().compareTo(o.getCreatedDate());
}
public static void main(String args[]) throws Exception {
Set<User> userSet = new HashSet<User>();
userSet.add(new User(1, "Pushpesh", sdf.parse("16-02-2018")));
userSet.add(new User(2, "Vikrant", sdf.parse("12-02-2018")));
userSet.add(new User(3, "Abhay", sdf.parse("11-02-2018")));
userSet.add(new User(4, "Komal", sdf.parse("18-02-2018")));
userSet.stream().forEach(System.out::println);
// this will remove user with id 2 no matter what his name and
// createdDate are
userSet.remove(new User(2, "Vikrant", sdf.parse("12-02-2018")));
System.out.println("After removing userId 2");
userSet.stream().forEach(System.out::println);
System.out.println();
List<User> userList = new ArrayList<User>(userSet);
System.out.println("Before sorting");
userList.stream().forEach(System.out::println);
Collections.sort(userList); // This will sort based on date
System.out.println("After sorting");
userList.stream().forEach(System.out::println);
}
}
Надеюсь, это прояснит все, что вы хотели.Дайте мне знать, если у вас есть какой-либо запрос.
После выполнения этот код выдает следующий вывод:
userId: 1, userName: Pushpesh, createdDate: 16-02-2018
userId: 2, userName: Vikrant, createdDate: 12-02-2018
userId: 3, userName: Abhay, createdDate: 11-02-2018
userId: 4, userName: Komal, createdDate: 18-02-2018
After removing userId 2
userId: 1, userName: Pushpesh, createdDate: 16-02-2018
userId: 3, userName: Abhay, createdDate: 11-02-2018
userId: 4, userName: Komal, createdDate: 18-02-2018
Before sorting
userId: 1, userName: Pushpesh, createdDate: 16-02-2018
userId: 3, userName: Abhay, createdDate: 11-02-2018
userId: 4, userName: Komal, createdDate: 18-02-2018
After sorting
userId: 3, userName: Abhay, createdDate: 11-02-2018
userId: 1, userName: Pushpesh, createdDate: 16-02-2018
userId: 4, userName: Komal, createdDate: 18-02-2018