我想写一个比较器,让我按值而不是默认的自然顺序对TreeMap进行排序.
我试过这样的东西,却找不到出了什么问题:
import java.util.*;
class treeMap {
public static void main(String[] args) {
System.out.println("the main");
byValue cmp = new byValue();
Map<String, Integer> map = new TreeMap<String, Integer>(cmp);
map.put("de",10);
map.put("ab", 20);
map.put("a",5);
for (Map.Entry<String,Integer> pair: map.entrySet()) {
System.out.println(pair.getKey()+":"+pair.getValue());
}
}
}
class byValue implements Comparator<Map.Entry<String,Integer>> {
public int compare(Map.Entry<String,Integer> e1, Map.Entry<String,Integer> e2) {
if (e1.getValue() < e2.getValue()){
return 1;
} else if (e1.getValue() == e2.getValue()) {
return 0;
} else {
return -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我要问的是:我可以Map.Entry传递给比较器吗?
我需要HashMap根据存储在其中的值对我进行排序.在HashMap包含存储在手机联系人的名字.
此外,我需要在对值进行排序时自动对键进行排序,或者您可以说键和值绑定在一起,因此值的任何更改都应该反映在键中.
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"froyo");
map.put(2,"abby");
map.put(3,"denver");
map.put(4,"frost");
map.put(5,"daisy");
Run Code Online (Sandbox Code Playgroud)
所需输出:
2,abby;
5,daisy;
3,denver;
4,frost;
1,froyo;
Run Code Online (Sandbox Code Playgroud) 我们如何排序HashMap<key, ArrayList>?
我想根据一个值来排序ArrayList.
我在java中有以下hashmap:
{B046 = 0.0,A061 = 3.0,A071 = 0.0,B085 = 0.0,B075 = 3.0,B076 = 9.0,B086 = 3.0,B095 = 0.0,B096 = 0.0,A052 = 0.0,B066 = 0.0,B056 = 9.0,B065 = 0.0,B055 = 9.0}
我应该如何对hashmap进行排序,以便将Alphabet和数字数字考虑在内?
生成的hashmap应如下所示:
{A052 = 0.0,A061 = 3.0,A071 = 0.0,B046 = 0.0,B055 = 9.0,B056 = 9.0,B065 = 0.0,B066 = 0.0,B075 = 3.0,B076 = 9.0,B085 = 0.0,B086 = 3.0,B095 = 0.0,B096 = 0.0}
感谢帮助!
我有一个
Map<Float, MyObject>
Run Code Online (Sandbox Code Playgroud)
根据浮点数保持地图排序的最佳方法是什么?
是SortedMap最好的答案吗?TreeMap?我该如何使用它?
我只创建一次地图并替换MyObject频繁使用myMap.put()和myMap.get().
假设用户输入一个数组,例如:
Array = {France, Spain, France, France, Italy, Spain, Spain, Italy}
Run Code Online (Sandbox Code Playgroud)
我确实知道它的长度
的index阵列将是:
index = {0, 1, 2, 3, 4, 5, 6, 7}
Run Code Online (Sandbox Code Playgroud)
现在,使用后对其进行排序 Arrays.sort(Array);
newArray 将会像:
newArray = {France, France, France, Italy, Italy, Spain, Spain, Spain}
Run Code Online (Sandbox Code Playgroud)
而newIndex将是:
newIndex = {0, 2, 3, 4, 7, 1, 5, 6}
Run Code Online (Sandbox Code Playgroud)
问题是:如何newIndex从输入数组中找到?
提前致谢
如何按值实现STL地图排序?
例如,我有一张地图m:
map<int, int> m;
m[1] = 10;
m[2] = 5;
m[4] = 6;
m[6] = 1;
Run Code Online (Sandbox Code Playgroud)
我想按照m价值对地图进行排序.所以,如果我打印地图,我想得到如下结果:
m[6] = 1
m[2] = 5
m[4] = 6
m[1] = 10
Run Code Online (Sandbox Code Playgroud)
我怎样才能以这种方式对地图进行排序?有什么方法可以用排序值处理键和值吗?
如果LinkedHashMap包含String和Integer,我如何根据其值对LinkedHashMap进行排序.所以我需要根据整数值对它进行排序.非常感谢
我是Java 8的新手,不知道如何使用流和它的排序方法.如果我有如下地图,如何按值对此地图进行排序,以便只使用Java 8获取前10个条目.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 10);
map.put("b", 30);
map.put("c", 50);
map.put("d", 40);
map.put("e", 100);
map.put("f", 60);
map.put("g", 110);
map.put("h", 50);
map.put("i", 90);
map.put("k", 70);
map.put("L", 80);
Run Code Online (Sandbox Code Playgroud)
我知道在Java 8之前,我们可以将这个链接排序:https://stackoverflow.com/a/109389/4315608
我想要做的是按值排序地图.我找了很多关于stackoverflow网站上可用的问题,并找到了以下解决方案,它做了我想要的但却错过了一件小事.
Link1:排序地图
但我遇到的问题是默认情况下按值按升序排序.我想按降序排序:
所以我做的是创建了一个实现比较器的类
class MyComparator implements Comparator {
Map map;
public MyComparator(Map map) {
this.map = map;
}
public int compare(Object o1, Object o2) {
return ((Integer) map.get(o2)).compareTo((Integer) map.get(o1));
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将我的地图传递给树图,
MyComparator comp = new MyComparator(myMap);
Map<String, Integer> newMap = new TreeMap(comp);
newMap.putAll(myMap);
Run Code Online (Sandbox Code Playgroud)
这似乎是不好的方法,因为我觉得这是低效的.有没有办法在链接中更改解决方案,默认情况下按降序排序.
java ×9
hashmap ×4
sorting ×4
algorithm ×1
c++ ×1
dictionary ×1
java-8 ×1
java-stream ×1
sortedmap ×1
stl ×1