gpt4 book ai didi

java - 如何检索最喜欢的标签列表,这些标签是根据它标记的帖子的数量排序的?

转载 作者:行者123 更新时间:2023-11-30 08:14:31 25 4
gpt4 key购买 nike

我是 Java 8 lambda 表达式的新手。

我有一个 List<Post>每个Post可以属于多个帖子。

class Post{
String name;
List<String> tags;
....
}

我想检索最喜欢的标签列表,这些标签是根据它标记的帖子的数量排序的。如何使用 lambda 表达式实现?

以 JSON 形式存储在 MongoDB 中的示例输入:

[
{
"name": "java with spring",
"tags": [
"java",
"spring"
]
},
{
"name": "spring with mongodb",
"tags": [
"java",
"spring",
"mongodb"
]
},
{
"name": "spring with hibernate",
"tags": [
"java",
"spring",
"hibernate"
]
}
]

预期输出:

java,spring,mongodb,hibernate

这是我在得到以下答案后尝试过的:;

List<Post> posts = ...

List<String> tags = new ArrayList<>();
Map<String, Integer> map = new TreeMap<String, Integer>();

// get list of all tags
posts.stream().forEach(post -> tags.addAll(post.getTags()));
// populate map with tag and its count (frequency)
tags.stream().forEach(tag -> map.put(tag, map.get(tag) == null ? 1 : map.get(tag) + 1));

Comparator<Entry<String, Integer>> byValue = (entry1, entry2) -> entry1.getValue().compareTo(entry2.getValue());
// sort the map by value and return the sorted keys as favorite tags
List<String> favoriteTags = map.entrySet().stream().sorted(byValue.reversed()).map(e -> e.getKey()).collect(Collectors.toList())

最佳答案

我不知道是否可以在一个表达式中实现这一点,但可以分两步完成,首先构建一个计算每个标 checkout 现次数的映射:

Map<String, Integer> tags = new HashMap<>();
posts.forEach(p -> p.tags.forEach(t -> tags.put(t, tags.get(t) != null ? tags.get(t)+1 : 1)));
List<String> sortedTags = tags.entrySet().stream().sorted((e1, e2) -> e2.getValue() - e1.getValue()).map(e -> e.getKey()).collect(Collectors.toList());

关于java - 如何检索最喜欢的标签列表,这些标签是根据它标记的帖子的数量排序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com