Как найти первые три строки, которые начинаются со строчной буквы `a` в отсортированном порядке - PullRequest
0 голосов
/ 31 октября 2019

Java 8 Stream API /

Как найти первые три строки, которые начинаются со строчной буквы a в отсортированном порядке. Как распечатать результат с помощью System.out.println().

List<String> myList =

   Arrays.asList("A1", "a2", "b1", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4", "a6");

       myList.stream().filter(s -> s.startsWith("a"))

             .map(String::toLowerCase)

             .sorted()

             .forEach(s ->System.out.println("Filtered value: " + s)); 

Как можно распечатать только первые три строки, которые начинаются со строчной буквы a в отсортированном порядке?

помогите, пожалуйста,

& В этом случае: я не понимаю эту задачу с вложенным: Как можно распечатать только первые три строки, которые начинаются со строчной буквы a в отсортированном порядке?

public class Task {

public static void main(String[] args){

final List<String> myList1 =
    Arrays.asList("c1", "b2", "G3", "g4", "b1",
                  "b3", "G5", "g3", "b5", "e2", "b8", "b2",
                  "g8", "i9", "b10", "j6", "s2", "g2", "B9",
                  "B1", "g7", "b8", "N7", "e9");
final List<String> myList2 =
    Arrays.asList("c1", "b2", "G3", "g4", "b1",
                  "b3", "G5", "g3", "b5", "e2", "b8", "b2",
                  "g8", "i9", "b10", "j6", "s2", "g2", "B9",
                  "B1", "g7", "b8", "N7", "e9");

List<List<String>> nestedList = new ArrayList<>();
nestedList.add(myList1);
nestedList.add(myList2);}}

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Похоже, это работает - нужно указать List, с каким типом Объекта вы работаете

List<String> myList = Arrays.asList("A1", "a2", "b1", "c2", "A2", 
                                   "a3", "c2", "A3", "c2", "a1", "a4", "a6");

myList.stream().filter(s -> s.startsWith("a")).sorted().limit(3)
forEach(s ->System.out.println("Filtered value: " + s));

Также, поскольку вы хотите использовать только строчные буквы a, преобразовывать в строчные буквы не нужно.

0 голосов
/ 31 октября 2019

Вы можете добавить .limit(3) в свой поток после сортировки. Список должен быть набран List<String>, чтобы использовать методы String, и вам не нужно toLowerCase, если вы не хотите преобразовывать результаты в нижний регистр.

List<String> myList = List.of(
    "A1", "a2", "b1", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4", "a6");
myList.stream().filter(s -> s.charAt(0) == 'a').sorted().limit(3)
    .forEach(s -> System.out.println("Filtered value: " + s));

Обновление: Для числового упорядочения из индекса 1 каждой строки:

Comparator<String> comparator = Comparator.comparing(
    s -> Integer.parseInt(s.substring(1)));
myList.stream().filter(s -> s.charAt(0) == 'a').sorted(comparator).limit(3)
    .forEach(s -> System.out.println("Filtered value: " + s));

...