【发布时间】:2018-08-02 19:58:36
【问题描述】:
我需要按列表值元素的属性对地图进行排序。查看代码。
public Map<String, List<Summary>> getMostMentions() throws Exception {
List<Tweet> tweets;
try {
tweets = getApiFromTweet().getTweets();
} catch (Exception e) {
throw new Exception(e);
}
List<Summary> summary = new ArrayList<>();
tweets.forEach(t -> {
summary.add(
new Summary(
t.getUser().getScreen_name(),
t.getFollowersCount(),
t.getRetweet_count(),
t.getFavorite_count(),
t.getText(),
t.getCreated_at(),
appConfig.getProfileLink(t.getUser().getScreen_name()),
appConfig.getTweetLink(t.getUser().getScreen_name(), t.getId())));
});
Map<String, List<Summary>> mostMentionsMap = summary.stream().collect(Collectors.groupingBy(Summary::getScreen_name));
mostMentionsMap.forEach((k,v) -> {
v.sort(Comparator.comparing(Summary::getFavorite_count).reversed());
});
return mostMentionsMap;
}
我需要通过 getFavorite_count 对地图 mostMentionsMap 进行排序 元素列表返回地图排序。 我已经对每个地图项的元素进行了排序,但我需要对地图使用相同的排序标准。
我可以按键排序查看代码。
LinkedHashMap<String, List<SummaryTweet>> mapSorted = mostMentionsMap.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
但是,我必须按值(List)的元素的属性进行排序。 不知道我解释的好不好?
【问题讨论】:
-
您不能对
Map中的键进行排序,您可以对SortedMap中的键进行排序。当您说“对地图进行排序”时,您到底想对什么进行排序。 -
你要排序的
Summary的属性是什么?既然你有一个List和Summary,你想使用哪个Summary? -
@Slaw 使用 Summary 类的方法 getFavorite_count() 相同的标准。
标签: java lambda java-8 comparator