在java中使用lambdas对字符列表进行排序

时间:2016-03-28 02:14:03

标签: java java-stream

好的,这是作业。我尝试了几件事但却无法让它发挥作用。说明是 - 编写一个插入30个随机字母的程序 进入清单。执行以下操作并显示结果: a)按升序对列表进行排序。 b)按降序对List进行排序。 c)按升序显示列表,删除重复项。我有最简单的部分,但是当涉及到排序我不知道从哪里开始。     公共类RandomCharacters {

// private static List randomCharacters;

public static void main(String[] args) {


    //Create List of Char type
    List<Character> randomCharacters = new ArrayList<>();
    //Character[] randChars = new Character[30];

    //generate random letters and add to the list
    for(int i = 0; i<30; i++){
        int num = (int) (26* Math.random());
        //randChars[i] = (char) (num + 'a');
        char letter = (char) (num + 'a');
        randomCharacters.add(letter);
        //System.out.println(letter);
    }
    //System.out.println( "Unsorted list= " + Arrays.asList(randChars));
    System.out.println( "Unsorted list= " + randomCharacters);


    System.out.println("Ascending sort: ");
    Arrays  .stream(randomCharacters)
            .sorted()
            .collect(Collectors.toList());
}

我尝试过两种方式。一个使用Character Array并使用tolist转换它,只使用ArrayList但排序不起作用。关于为什么这不起作用的任何暗示。

3 个答案:

答案 0 :(得分:4)

您可以拨打Stream.sorted()Stream.sorted(Comparator<? super T>)以及Stream.distinct()。像,

System.out.println("Unsorted list= " + randomCharacters);
System.out.println("Sorted Ascending: ");
randomCharacters.stream().sorted().forEach(System.out::println);
System.out.println("Sorted Descending: ");
randomCharacters.stream().sorted(Comparator.reverseOrder())
        .forEach(System.out::println);
System.out.println("Ascending unique sort: ");
randomCharacters.stream().sorted().distinct().forEach(System.out::println);

答案 1 :(得分:3)

因为你打电话给&#34; .collect&#34;在流上,但不要将它存储在任何地方。然后打印未排序的列表(打印后将对列表进行排序)。 这样做

List<Character> sortedList = randomCharacters.stream()
                                             .sorted()
                                             .collect(Collectors.toList());
System.out.println("Ascending sort: " + sortedList);

答案 2 :(得分:0)

好的,谢谢你们,我们使用了你们两个方面的组合,这是我的完整代码。我觉得它对我需要的东西有好处,但是如果有人认为它可以更有效率让我知道     公共类RandomCharacters {

private static List<Character> randomCharacters;

public static void main(String[] args) {


    //Create List of Char type
    List<Character> randomCharacters = new ArrayList<>();


    //generate random letters and add to the list
    for(int i = 0; i<30; i++){
        int num = (int) (26* Math.random());
        char letter = (char) (num + 'a');
        randomCharacters.add(letter);
    }

    System.out.println( "Unsorted list= " + randomCharacters);

    List<Character> sortedList = randomCharacters.stream()
                                                 .sorted()
                                                 .collect(Collectors.toList());
    System.out.println("Ascending sort: " + sortedList);


    List<Character> reversedList = randomCharacters.stream()
                                                    .sorted(Comparator.reverseOrder())
                                                    .collect(Collectors.toList());
    System.out.println("Sorted Descending: " + reversedList);

    List<Character> uniqueList = randomCharacters.stream()
                                                 .sorted()
                                                 .distinct()
                                                 .collect(Collectors.toList());
    System.out.println("Unique Sort: "+ uniqueList);
}

}

我会在上交之前添加更多评论