2016-03-28 112 views
1

确定这是作业。我尝试了一些东西,但只是无法让它工作。说明是 - 编写一个程序,将30个随机字母 插入列表中。执行以下操作并显示结果: a)按升序对列表进行排序。 b)按降序对列表进行排序。 c)删除重复项以升序显示列表。我做了最简单的部分,但是当涉及到排序时,我不知道从哪里开始。 public class RandomCharacters {使用java中的lambdas对字符列表进行排序

// 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()); 
} 

我试过两种方法。一个使用字符数组并将其转换为使用tolist并仅使用ArrayList,但排序不起作用。任何暗示为什么这不起作用。

回答

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

}

我将转向中以及

3

因为您在流上调用“.collect”,但不要将其存储在任何位置。并且您打印未排序的列表(您在打印列表后排序列表)。 做到这一点,而不是

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

前添加更多评论完美的谢谢你。现在我明白我的问题了。我打电话收集,但它不是“保存”任何东西,所以我需要创建sortedList列表稍后调用收集。现在为部分B我将只使用.reversed和部分C我将使用地图!谢谢! – Cake771

+0

哦,我打印出来之前,我排序它!那真是太棒了 – Cake771

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); 
+0

真棒。我做了如下的其他答案,但我看到这个如何工作。实际上,我觉得这样做效果更好,但是当它打印出来时,它只是将每一个字母打印在一个新行中,我认为它应该将它打印为列表(例如[a,b,c,d,等等])。 Arrays.stream我使用randomCharacter.stream。谢谢你的帮助,我很欣赏它 – Cake771

相关问题