我想要反转Set<String>
所以,我正在从某些Set<String>
创建HashMap
个键并打印出值,即键。
Set<String> movies = movieList.keySet();
for(String movie : movies) {
output += movie + "\n";
}
我需要将Set<String>
的值从最后一个值反转为第一个值这可能吗?
答案 0 :(得分:1)
如果您希望订购Map
的密钥,则必须使用其他Map
实施,因为HashMap
的密钥未被订购。
您可以使用TreeMap
。您可以传递给它的构造函数Comparator
,它将确定键的顺序。这将决定Set
返回的keySet()
中的键的顺序。
例如,如果您希望按照反向词典顺序对电影进行排序:
Map<String,Movie> moviesByName = new TreeMap<>((s1,s2)->s2.compareTo (s1));
或者,正如词典建议:
Map<String,Movie> moviesByName = new TreeMap<>(Comparator.<String>naturalOrder().reversed());
答案 1 :(得分:1)
如果您使用的是Java8,可以尝试:
List<String> sorted = movieList.keySet().stream()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList());
如果只想输出字符串,那就更好了:
String output = movieList.keySet().stream()
.sorted(Collections.reverseOrder())
.collect(Collectors.joining("\n"));
但是如果意图只是反转map.keySet,就像Andreas建议的那样......那么
ArrayList<String> list = new ArrayList<>(movieList.keySet());
Collections.reverse(list);
//list is now in reverse order of the keySet
答案 2 :(得分:0)
Set
的关键质量是它没有排序。因此,您需要使用其他数据结构来实现此目标。最简单的解决方案可能是List
,但是你失去了Set
的质量,不包含相等的entires(entry.equals(otherentry)== true)
如果您想按照填充(或反向)的顺序检索条目,但仍希望保留Set
质量,则可以使用LinkedHashSet
Eran的解决方案也是可能的,但是你需要创建一个比较器,它会导致添加到TreeMap的顺序。
答案 3 :(得分:0)
After getting values stored in a Set, Add all values of Set into a List then apply reverse function of list. Below is an example
import java.util.*;
class Test
{
public static void main(String args[])
{
Set h=new LinkedHashSet();
List h2 = new LinkedList();
h.add("Lovely");
h.add("Professional");
h.add("University");
h2.addAll(h);
System.out.println(h);
Collections.reverse(h2);
System.out.println(h2);
}
}