请注意:我看到这个问题与这个问题类似,但在那个问题中,他们只是在对地图进行排序。在这里,我需要从地图中提取键及其值,对它们进行排序并将它们放置在另一个集合中。该集合必须是可流化的,并按照排序方法将其放入的顺序显示该流的元素。
Java 11。我有以下POJO:
@Data // lombok generates ctor, getters, setters, etc.
public class Answer {
private String text;
// ... many other fields here, omitted for brevity
}
我有一个Map<Answer,Integer>
,它表示每个Answer
的实例数,例如:
Map<Answer,Integer> answerCounts = new HashMap<>();
answerCounts.put(answer1, 14); // answer #1 occurs 14 times
answerCounts.put(answer2, 7);
answerCounts.put(answer3, 239);
answerCounts.put(answer4, 7);
answerCounts.put(answer5, 54);
answerCounts.put(answer6, 2);
我想将此映射转换为一个集合(可能是List
或Set
(,其中Answer
元素根据它们在映射中的计数值进行排序。在";领带";(其中两个映射键具有相同的计数值(,那么Answer
元素的出现顺序并不重要,只要它们根据其他非绑定元素正确排序即可。
因此,使用上面的映射示例,我希望这个转换的输出是一个列表/集合,它按以下顺序提供Answer
元素:
- 答案#3(计数=239(
- 答案5(计数=54(
- 答案1(计数=14(
- 答案#2(计数=7(
- 答案#4(计数=7((<--#2和#4具有相同的计数,所以它们各自的顺序对我来说无关紧要(
- 答案6(计数=2(
知道我该怎么做吗目标是拥有一个集合,然后我可以流式传输(someCollection.stream()...
(并按照元素在";计数映射";。
使用LinkedHashMap而不是Map。不同的是,第一个有一个顺序,所以当你对它进行排序时,它将保持排序(直到你修改或添加新元素(
顺便说一句,你可以通过地图进行流式传输
answerCounts.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEach(System.out::println);
这会对地图进行排序,但顺序不对,我找不到反转的方法