我想在键和值上对Map进行排序.首先是关键然后是价值.例如,这应该是结果;
1,2
1,3
2,1
2,2
任何人都有关于如何有效实现这一目标的建议?我一直在看人们使用TreeMap对键进行排序,但我也需要值.
或者,我们欢迎任何其他方法对键和值进行排序.
有没有人知道如何使用内置collection.sort和comparator<string>界面按照频率(从最小到最大)的顺序对单词列表进行排序?
我已经有一个方法可以获取文本文件中某个单词的计数.现在,我只需要创建一个方法来比较每个单词的计数,然后将它们放在按最小频率排序到最大值的列表中.
任何想法和提示将非常感谢.我在开始使用这种特殊方法时遇到了麻烦.
public class Parser implements Comparator<String> {
public Map<String, Integer> wordCount;
void parse(String filename) throws IOException {
File file = new File(filename);
Scanner scanner = new Scanner(file);
//mapping of string -> integer (word -> frequency)
Map<String, Integer> wordCount = new HashMap<String, Integer>();
//iterates through each word in the text file
while(scanner.hasNext()) {
String word = scanner.next();
if (scanner.next()==null) {
wordCount.put(word, 1);
}
else {
wordCount.put(word, wordCount.get(word) + 1);;
}
}
scanner.next().replaceAll("[^A-Za-z0-9]"," ");
scanner.next().toLowerCase();
} …Run Code Online (Sandbox Code Playgroud) 我在地图中保存产品的详细信息,并添加ArrayList <HashMap <String,String >>并设置为自定义列表适配器.我需要按价格对价值进行排序.怎么实现呢?提前致谢.
我有以下内容HashMap:
HashMap<String, Integer> counts = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)
根据价值观点订购的最简单方法是什么?
如何使用该值对LinkedHashMap进行排序?
有没有办法将条目插入到LinkedHashMap中,以便根据它们的值按顺序插入它们?
在最后几天,我开始"玩"一些Java 8功能,比如流(我研究了一些文档和几个例子).
在我的应用程序中,我有一个Map,我需要获得具有最高值的三个元素(float部分).
我尝试对我的代码进行不同的修改(以及其中一些解决方案:按地图<键,值>按值(Java)排序),例如:
Map<Long, Float> great = createMapWith20Elements();
Map<Long, Float> small = great.entrySet().stream()
.sorted(Map.Entry.<Long, Float>comparingByValue().reversed())
.limit(3)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)
但是reslt总是一样的:有时代码工作正常,其他它给了我一个
java.lang.ArrayIndexOutOfBoundsException: 19
Run Code Online (Sandbox Code Playgroud)
在极少数情况下,超出界限的指数为18.
这种"随机"行为(18,19或正确的阐述)让我想到了一个"平行线程"问题.
我确定great地图总是有20个元素......如果我打印它们我收到:
2,-0.5
3,0.0
4,0.0
5,0.0
6,0.0
7,-0.33333334
8,0.0
9,0.0
10,0.0
11,0.0
12,0.5
13,0.0
14,0.0
15,-0.5
18,0.0
19,0.0
21,0.0
22,0.0
23,0.0
24,0.0
Run Code Online (Sandbox Code Playgroud)
我意识到有17个对象可以成为前3个......但对我的算法来说这不是问题.
你能以某种方式帮助我吗?
谢谢
编辑:
该方法createMapWith20Elements()有一个虚拟名称,以便更好地解释我的情况:我确定它返回20个元素,因为它使数据库读取...但它应该返回任何匹配的记录.
顺便说一下它结束了
// myIds is an ArrayList<Long>
myIds.parallelStream().forEach(e -> trust.put(e, 0f));
return trust;
Run Code Online (Sandbox Code Playgroud)
替换myIds.stream()它似乎工作正常...我无法弄清楚如何使用parallelStream写入对象(Collection而不是Stream),并返回对象本身(Collection),在调用函数中它可能导致这种问题.
Java 编程新手,无法找到答案。
我为我构建的一个小游戏创建了一个 Firebase 数据库,并设法使分数正确存储。现在我想建立排名前十的排行榜。数据库本身由最高分索引,我得到了前 10 名的分数:
mDatabase.child(gameName).child("Score").limitToFirst(10).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
HashMap<String,Long> topScores = (HashMap<String, Long>) dataSnapshot.getValue();
....
Run Code Online (Sandbox Code Playgroud)
问题在于(从我所见)我收到的是一个 HashMap,我将其存储在 topScores 中。同样,根据我目前的理解,HashMaps 是无组织的,所以当你打印它时,它看起来像这样:
{DummyData1=0, try=0, dummy2=5, lalala=10, Name1=0, try2=0, lala=11, try3=0, la=3, dummy=1}
Run Code Online (Sandbox Code Playgroud)
所以,没有明显的顺序。
最后,问题是您建议我如何对创建的 HashMap 进行排序,以便将 Key 和 Value 对存储在其相应的 TextView 中(TextView 第一行中的最高分和最高分,依此类推)。
谢谢!
我已排序的HashMap使用排序的Map <键,值>由值(爪哇)到我有一个LinkedHashMap,即,Iterable其中garantees迭代顺序.
现在,我想用一个单行代码检索地图java.util.List的第一个n条目,如果可能的话,使用Java 8 Collection Stream API技术.
我发现如何从Iterator获得两个连续的值,这解释了有可能用数组做到这一点,但这并不优雅,不同于我想得到一个List(虽然可以转换,但这是一个不必要的步骤)和需要额外的方法.
如何通过多个属性对HashMap条目进行排序.
假设我有一个带有键字符串和值为Object的映射.
Map<String, UserMetrics> map = new HashMap<>
map.put("user10",new UserMetrics(1,100,111));
map.put("user3",new UserMetrics(10,330,444));
map.put("user11",new UserMetrics(333,100,555));
map.put("user1",new UserMetrics(1,111,433));
public static class UsageMetrics implements Serializable {
private long param1;
private long param2;
private long param3;....
}
Run Code Online (Sandbox Code Playgroud)
我想先用"param1"排序用户,然后用"param2"排序
结果预期:<>
user10, UserMetrics(1,100,111)
user1, UserMetrics(1,111,433))
user3, UserMetrics(10,330,444));
user11, UserMetrics(333,100,555))
Run Code Online (Sandbox Code Playgroud) 免责声明:我已经发布过一次这样的问题,并且被标记为重复。请尝试帮助我。我已经浏览了 stackoverflow 上以前的所有方法,但没有任何帮助。所有提到的对 Map(Key,Values) 进行排序的方法在我的情况下都不起作用,因为我还需要更进一步,即检索值的属性。这一次,我尝试提供完整的细节。
我有一个 Java 中的映射(字符串,对象),我想使用对象的属性之一对其进行排序。
例如假设我有一堂课
class Entry
{
int id;
String name;
String address;
//Rest of the code
}
Run Code Online (Sandbox Code Playgroud)
现在,我创建了一张地图
Map<String,Entry>
Run Code Online (Sandbox Code Playgroud)
我想按类 Entry 的属性 id (Entry.id) 对地图进行排序
请帮忙 !
例如,我有三个 Entry 类的对象
entry1 :
id=1
name="abc"
address="india"
entry2 :
id=2
name="xyz"
address="india"
entry3 :
id=3
name="pqr"
address="india"
Run Code Online (Sandbox Code Playgroud)
现在,我的地图最初如下:
Key : Value
first: entry2
second: entry3
third : entry1
Run Code Online (Sandbox Code Playgroud)
排序后应该是这样的
Key : Value
third : entry1
first: entry2
second: entry3
Run Code Online (Sandbox Code Playgroud)