【问题标题】:sort a list of characters using lambdas in java在java中使用lambdas对字符列表进行排序
【发布时间】:2016-03-28 02:14:03
【问题描述】:

好的,这是作业。我已经尝试了几件事,但无法让它发挥作用。指令是——编写一个插入30个随机字母的程序 成一个列表。执行以下操作并显示结果: a) 按升序对列表进行排序。 b) 按降序对列表进行排序。 c) 按升序显示列表,删除重复项。我已经完成了最简单的部分,但是当涉及到排序时,我不知道从哪里开始。 公共类 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());
}

我尝试了两种方法。一个使用字符数组并使用 tolist 和仅使用 ArrayList 进行转换,但排序不起作用。关于为什么这不起作用的任何提示。

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    您可以致电Stream.sorted()Stream.sorted(Comparator&lt;? super T&gt;)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);
    

    【讨论】:

    • 太棒了。我像下面的另一个答案一样做到了,但我也看到了这个答案是如何工作的。实际上我觉得这效果更好但是当它打印时它只是将每个字母打印在一个新行上,我认为它应该将它打印为一个列表(例如[a,b,c,d,等等]。也是这样而不是这样做Arrays.stream 我使用 randomCharacter.stream。谢谢你的帮助,我很感激
    【解决方案2】:

    因为您在流上调用“.collect”,但不要将其存储在任何地方。然后打印未排序的列表(打印后对列表进行排序)。 改为这样做

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

    【讨论】:

    • 非常感谢。现在我明白我的问题是什么了。我正在调用collect,但它没有“保存”任何东西,所以我需要创建sortedList列表以便稍后调用具有该集合的列表。现在对于 b 部分,我将只使用 .reversed,对于 c 部分,我将使用地图!谢谢!
    • 哦,我在排序之前打印了列表!这很愚蠢
    【解决方案3】:

    好的,谢谢大家,我结合了你们的两种解决方案,这是我的完整代码。我认为它对我的需要有好处,但如果有人认为它可以更有效,请告诉我 公共类 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);
    }
    

    }

    我也会在上交之前添加更多的cmets

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2019-01-15
      • 2021-02-21
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多