В моем случае использования я хотел бы сохранить дату в объекте и отсортировать объект на основе даты [пользовательский компаратор] в java. Я попытался следующий код,Как хранить дату с миллисекундами и сортировать с помощью коллекций в java
class Tweet implements Comparable<Tweet>{
int tweetId;
Date dateTime;
public Tweet(int tweetId, Date dateTime)
{
this.tweetId = tweetId;
this.dateTime = dateTime;
}
public Date getDateTime()
{
return dateTime;
}
public int getTweetId()
{
return tweetId;
}
@Override
public int compareTo(Tweet o)
{
if (getDateTime() == null || o.getDateTime() == null)
return 0;
return getDateTime().compareTo(o.getDateTime());
}
}
public class ApplicationObj
{
/** Compose a new tweet. */
public void postTweet(int userId, int tweetId) {
Date date = new Date();
User user;
Date dTime = new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String dateTime = sdf.format(date);
dTime = sdf.parse(dateTime);
} catch (ParseException e)
{
;
}
if(!userMap.containsKey(userId))
{
user = new User(userId);
userMap.put(userId, user);
} else {
user = userMap.get(userId);
}
ArrayList<Tweet> tweets = user.getTweets();
tweets.add(new Tweet(tweetId, dTime));
}
public List<Integer> getNewsFeed(int userId) {
if(!userMap.containsKey(userId))
{
return new ArrayList<Integer>();
}
User user = userMap.get(userId);
ArrayList<Tweet> newsFeedTweets = new ArrayList<Tweet>();
ArrayList<Tweet> userTweets = user.getTweets();
Set<User> followers = user.getFollowers();
ArrayList<Tweet> followersTweets = getFollowersTweets(followers);
newsFeedTweets.addAll(userTweets);
newsFeedTweets.addAll(followersTweets);
Collections.sort(newsFeedTweets, new Comparator<Tweet>() {
public int compare(Tweet o1, Tweet o2) {
if (o1.getDateTime() == null || o2.getDateTime() == null)
return 0;
return o2.getDateTime().compareTo(o1.getDateTime());
}
});
ArrayList<Tweet> newsFeed;
if(newsFeedTweets.size() > 10)
{
newsFeed = new ArrayList<Tweet>(newsFeedTweets.subList(0,10));
}else {
newsFeed = newsFeedTweets;
}
for(Tweet tweet : newsFeed)
{
System.out.println("id "+tweet.getTweetId());
}
return getTweetIds(newsFeed);
}
}
Я пытаюсь сохранить дату с миллисекундой после разбора простого формата даты.
Но он не работает. Может ли кто-нибудь помочь мне в этом?
У меня нет ошибок. Я пытаюсь получить твиты в отсортированном порядке. Я не разбираюсь в порядке. Он сортирует только секунды, а не миллисекунды. Я добавил еще одну функцию для твита, где я сделал сортировку. – Dany
@ У вас есть ошибка, потому что вы отбрасываете ее. Вы не должны использовать текущую дату по умолчанию, потому что это просто скроет ошибки и даст вам поведение, которое вы видите. –
@ Дата Дани просто завершает длительность, которая составляет миллисекунду. Невозможно указать, что вы хотите сортировать только за секунды, даже если хотите. –