- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试按元素的频率对元素进行排序
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int itr = Integer.parseInt(br.readLine());
for (int i = 0; i < itr; i++) {
int n = Integer.parseInt(br.readLine());
String[] val = br.readLine().split(" ");
Map<Integer, Integer> map = new HashMap<>();
for (int j = 0; j < n; j++) {
Integer temp = Integer.parseInt(val[j]);
map.putIfAbsent(temp, 0);
map.put(temp, map.get(temp) + 1);
}
这里我根据频率对映射进行排序并将其存储为 linkedHashMap。
Map<Integer, Integer> sortedMap = map.entrySet().stream()
.sorted(
(Map.Entry.<Integer, Integer>comparingByValue())
.thenComparing(Map.Entry.comparingByKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
for(Map.Entry entries : sortedMap.entrySet()){
System.out.println(entries.getKey() + " " + entries.getValue());
}
}
}
}
下面抛出编译器错误。
Map<Integer, Integer> sortedMap = map.entrySet().stream()
.sorted(
(Map.Entry.comparingByValue())
.thenComparing(Map.Entry.comparingByKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
示例输入164 -2 10 12 -8 4
示例输出 0
-8 -2 10 12 4 4
最佳答案
public static <K, V extends Comparable<? super V>>
Comparator<Map.Entry<K, V>> comparingByValue()
是一个静态方法,它需要 K, V
在其中使用时正确设置/更正/调整通用上下文。否则,它假设 K
是 Object
和V
是 Comparable
这不是什么Stream<Map.Entry<Integer, Integer>>#sorted
期望。请注意,流得到 <Map.Entry<Integer, Integer>>
来自 map.entrySet()
,其中map
参数化为 <Integer, Integer>
或结果的类型 sortedMap
,即Map<Integer, Integer>
.
Map.Entry.<Integer, Integer>comparingByValue()
给出了很好地解决问题所需的提示。
Map.Entry.comparingByValue()
就目前而言,这是一个非常模糊的东西。
Comparator<Map.Entry<Object, Comparable<Comparable<?>>>>
comparator = comparingByValue();
当你给它一个通用的上下文时,它会变得更有意义。
Comparator<Map.Entry<Integer, Integer>>
comparator = comparingByValue();
就您而言,这很重要,因为 Map.Entry.comparingByValue()
启动链,后面的实例方法(例如 thenComparing
)将根据前面方法的泛型参数(此处为 comparingByValue
)解析自己的泛型参数。
关于java - Map.Entry.<Integer, Integer>comparingByValue() 中 <Integer,Integer> 的重要性是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113660/
This question already has answers here: Generic type inference not working with method chaining? (2
我正在尝试按元素的频率对元素进行排序 import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt
我想根据值的字母顺序并忽略大小写对 Map 进行排序,并返回键列表。 /** * This method will sort allCostPlanDetailsRows based on V
我是一名优秀的程序员,十分优秀!