Поиск определенного диапазона чисел в java

#java #list #filter #numbers #range

#java #Список #Фильтр #числа #диапазон

Вопрос:

Вот мой код для получения учеников, которые получают оценки 70 и выше

 public static List<List<String>> higher (List<List<String>> data, String high) {
    
  return data.stream()    
             .filter(e-> e.get(6).equalsIgnoreCase(high))
             .collect(Collectors.toList());
}
  

Это мой результат

 [70]
  

Могу ли я узнать, как получить всех учащихся, которые получают 70 и выше

Комментарии:

1. Можете ли вы привести пример того, как структурирован список или как вы вызываете метод?

2. Вы сохраняете метки в виде строки? Лучше сохранить его как класс для ваших пользовательских данных и помечать как целое число, либо вам нужно разобрать строку до целого числа, а затем сравнить с вашим постоянным значением.

Ответ №1:

Протестируйте это:

 public static List<List<String>> distinction(List<List<String>> data, Integer high) {

        return data.stream()
                .filter(e-> Integer.parseInt(e.get(6)) >= high)
                .collect(Collectors.toList());
}
  

высокий должен быть 70

Комментарии:

1. @WJS Я использовал Integer.parseInt(), поэтому я использую Integer в параметре функции. Разница между int и Integer : geeksforgeeks.org/difference-between-an-integer-and-int-in-java

Ответ №2:

Поскольку у вас есть список списков, вам нужно выполнить flatmap поверх data , чтобы свести список списков к одному списку.

 int threshold = Integer.parseInt(high);
return data.stream()    
             .flatMap(d -> d.stream()) // converts list of lists to a stream of Strings of arbitrary length
             .filter(e -> Integer.parseInt(e.get(2)) >= threshold)
             .collect(Collectors.toList());
  

Здесь я предполагаю, что ваш список списков представляет собой набор из 3 списков элементов (из-за предоставленного вами вывода), где 3-й индексированный элемент ( e.get(2) ) — это оценка. Если вы преобразуете это значение в Integer using Integer.parseInt , вы сможете сравнить его для фильтрации.

Ответ №3:

Попробуйте сделать это так. Вам нужно преобразовать строку в int для сравнения. Также было бы лучше передать значение high как int.

 public static List<List<String>> Distinction(List<List<String>> data, int high) {
      
      return data.stream()    
                 .filter(e-> Integer.parseInt(e.get(2)) >= high)
                 .collect(Collectors.toList());
}