如何在Set <string>中反转值的顺序

时间:2018-04-22 06:35:54

标签: java collections hashmap set reverse

我想要反转Set<String>

中的值

所以,我正在从某些Set<String>创建HashMap个键并打印出值,即键。

Set<String> movies =  movieList.keySet();
for(String movie : movies) {
    output += movie + "\n";
}

我需要将Set<String>的值从最后一个值反转为第一个值这可能吗?

4 个答案:

答案 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);
}
}