如何输出地图的背面[Java]

如何输出地图的背面[Java],java,dictionary,Java,Dictionary,问题是这样的:简有一些朋友,她把他们联系在一起。我必须输出从最不喜欢的朋友到最喜欢的朋友 我主要好奇的是,在输出时如何反转贴图值的顺序。 在我的代码中,我必须通过迭代器(我无法直接使用集合)提取值,然后通过在索引0处插入每个连续元素将每个字符串存储到数组列表。结果,我想,这与工作顺序相反 import java.util.*; import java.io.*; import static java.lang.System.*; public class Friends { publi

问题是这样的:简有一些朋友,她把他们联系在一起。我必须输出从最不喜欢的朋友到最喜欢的朋友

我主要好奇的是,在输出时如何反转贴图值的顺序。 在我的代码中,我必须通过
迭代器
(我无法直接使用集合)提取值,然后通过在索引0处插入每个连续元素将每个字符串存储到
数组列表
。结果,我想,这与工作顺序相反

import java.util.*;
import java.io.*;
import static java.lang.System.*;

public class Friends {
    public static void main(String args[]) throws IOException
    {
        Scanner line = new Scanner(new File("friends.dat"));
        int trials = line.nextInt();
        for(int k = 0 ; k < trials ; k++)
        {
            TreeMap<Integer, String> m = new TreeMap<Integer,String>();
            int subtrials = line.nextInt();

            for(int a = 0; a < subtrials ; a++)
            {
                String name = line.next();
                int likes = line.nextInt();
                m.put(likes,name);
            }

            Iterator iter = m.values().iterator();       //**Code of interest starts here**
            ArrayList<String> list = new ArrayList<String>();

            while(iter.hasNext()) {

                list.add(0, (String)iter.next());
            }

            for(int a = 0 ; a < list.size() ; a++)
            {
                if(a == list.size() - 1)
                    out.print(list.get(a));
                else
                    out.print(list.get(a) + ", ");
            }
            out.println();
        }
    }
}
import java.util.*;
导入java.io.*;
导入静态java.lang.System.*;
公课朋友{
公共静态void main(字符串args[])引发IOException
{
扫描仪行=新扫描仪(新文件(“friends.dat”);
int trials=line.nextInt();
对于(int k=0;k
您可以简单地列出您的列表

 list.reverse();
或者,您可以使用带反向比较器的,以降序存储映射

... = new TreeMap<>(Collections.reverseOrder(Integer::compare));
…=新的树映射(Collections.reverseOrder(Integer::compare));
您可以简单地列出您的列表

 list.reverse();
或者,您可以使用带反向比较器的,以降序存储映射

... = new TreeMap<>(Collections.reverseOrder(Integer::compare));
…=新的树映射(Collections.reverseOrder(Integer::compare));

使用喜欢的数量作为键似乎很奇怪,因为多个朋友可能有相同数量的喜欢

在Java 8中,我将执行以下操作:

Map<String, Integer> map = new HashMap<>();
map.put("Jack", 7);
map.put("Jill", 3);
map.put("John", 12);

map.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByValue((a, b) -> b.compareTo(a)))
   .forEach(System.out::println);

使用喜欢的数量作为一个键似乎很奇怪,因为多个朋友可能有相同数量的喜欢

在Java 8中,我将执行以下操作:

Map<String, Integer> map = new HashMap<>();
map.put("Jack", 7);
map.put("Jill", 3);
map.put("John", 12);

map.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByValue((a, b) -> b.compareTo(a)))
   .forEach(System.out::println);
您可以使用自定义来反转映射中条目的顺序(请注意,这只适用于TreeMap-其他映射实现不关心顺序)

publicstaticvoidmain(字符串[]args){
TreeMap map=newtreemap((key1,key2)->Integer.compare(key2,key1));//自定义比较器。
图.put(1,“Bob”);
图.put(3,“Baz”);
图.put(2,“Foo”);
系统输出打印项次(map);
}
您可以使用自定义来反转映射中条目的顺序(请注意,这仅适用于树映射-其他映射实现不关心顺序)

publicstaticvoidmain(字符串[]args){
TreeMap map=newtreemap((key1,key2)->Integer.compare(key2,key1));//自定义比较器。
图.put(1,“Bob”);
图.put(3,“Baz”);
图.put(2,“Foo”);
系统输出打印项次(map);
}
请尝试以下操作:

m.forEach((a,b)->System.out.print(b+", "));
这将给你一个排序的地图,从最少的喜欢到最多的喜欢。 如果需要从最喜欢到最不喜欢的排序贴图,可以执行以下操作:

TreeMap<Integer, String> m = new TreeMap<Integer,String>(Collections.reverseOrder());
TreeMap m=newtreemap(Collections.reverseOrder());
请尝试以下操作:

m.forEach((a,b)->System.out.print(b+", "));
这将给你一个排序的地图,从最少的喜欢到最多的喜欢。 如果需要从最喜欢到最不喜欢的排序贴图,可以执行以下操作:

TreeMap<Integer, String> m = new TreeMap<Integer,String>(Collections.reverseOrder());
TreeMap m=newtreemap(Collections.reverseOrder());

是的,但它与在索引0处添加每个元素一样等效。我希望当直接从Map对象到输出时,..reverse()比依次在位置0插入每个元素更有效。是的,但它与在索引0处添加每个元素一样有效。我希望直接从Map对象输出..reverse()比依次在位置0插入每个元素更有效。我忘了提到没有两个人会有相同数量的喜欢。不管怎样,您的代码都非常…非常简洁。我不熟悉Java8。你能解释一下最后4行吗?@IanLimarta在我的回答中添加了一些基本的解释。除此之外,我建议您开始阅读Java流和lambda。在我看来,如果你真的能用喜欢的数量作为关键,那就更好了。我忘了提到没有两个人会有相同数量的喜欢。不管怎样,您的代码都非常…非常简洁。我不熟悉Java8。你能解释一下最后4行吗?@IanLimarta在我的回答中添加了一些基本的解释。除此之外,我建议您开始阅读Java流和lambda。在我看来,如果你真的可以使用喜欢的数量作为键,那么最好使用;它可能会出现溢出错误。使用
Integer.compare(键2,键1)
我假设'Over'表示溢出?如果我们处理的是难以置信的大数字(比如int的上下限),那么是的,我同意。本练习的目的只是说明可以使用比较器来解决OP
key2-key1
是一个糟糕的比较器;它可能会出现溢出错误。使用
Integer.compare(键2,键1)
我假设'Over'表示溢出?如果我们处理的是难以置信的大数字(比如int的上下限),那么是的,我同意。本练习的目的只是为了说明可以使用比较器来求解OP