Примеры решения задач на потоки данных Stream API
Условие задачи. Для любого набора случайно-сгенерированных чисел нужно определить количество парных. Для решения задачи использовать средства программного интерфейса Stream API.
Решение. Решение задачи отображено в статическом методе DemoStream() , который вызывается из функции main() .
import java.util.stream.*; import java.util.*; import java.util.function.*; public class TrainStreamAPI < public static void DemoStream() < // Задача. Для любого набора случайно сгенерированных чисел // нужно определить количество парных.
// 1. Создать поток данных из случайного массива чисел ArrayList AL = new ArrayList(); int number; Random rnd = new Random(); for (int i=0; i System.out.println(«Array AL:»); System.
out.println(AL); // 2. Определить количество парных чисел. Способ 1. // 2.1. Создать поток из массива AL — метод stream() Stream st = AL.stream(); // 2.2.
Объявить ссылку на стандартный // функциональный интерфейс Predicate Predicate fn; // эта ссылка будет передана в метод filter() // 2.3. Присвоить ссылке лямбда-выражение, которое определяет есть ли число четным fn = (n) -> (n%2) == 0; // 2.4.
Пример простой программы на Java
Вызвать метод filter, который виберет только парные числа из потока st Stream resStream = st.filter(fn); // 2.5. Вывести количество парных чисел System.out.println(«n color: #008000;»> // 3. Определить количество парных чисел. Способ 2 — быстрый способ int n2 = (int)(AL.stream().filter((n)->(n%2)==0)).count(); System.out.println(«n2 color: #800080;»> public static void main(String[] args) < DemoStream(); > >
Результат выполнения программы
Array AL: [-79, 99, -83, -75, -78, -22, -57, 84, 11, 15] n = 3 n2 = 3
2. Работа с потоками строк. Поиск в строке. Пример
Условие задачи. Задано множество фамилий сотрудников. Разработать программу, которая отображает все фамилии, начинающиеся на букву «J» . Задачу решить с использованием Stream API.
Решение.
import java.util.stream.*; import java.util.*; import java.util.function.*; public class TrainStreamAPI < public static void DemoStream() < // Задача. Задано множество фамилий сотрудников.
// Разработать программу, которая отображает все фамилии, начинающиеся на букву ‘J’ // 1. Организовать ввод фамилий с з клавиатуры. // Конец ввода — пустая строка «» Scanner scanner = new Scanner(System.in); String s; ArrayList AL = new ArrayList(); System.
out.println(«Enter names: «); while (true) < System.out.print(«name color: #800080;»>if (s.equals(«»)==true) break; AL.add(s); > System.
out.println(); // 2. Вывести массив введенных фамилий System.out.println(«AL color: #008000;»>// 3. Вычислить количество фамилий, которые начинаются на ‘J’ // 3.1. Объявить ссылку на функциональный интерфейс Predicate Predicate fn; // 3.2.
Установить лямбда-выражение для fn fn = (str) -> < if (str.charAt(0)==’J’) return true; return false; >; // 3.3. Конвертировать AL в поток строк Stream stream = AL.stream(); // 3.4. Получить отфильтрованный поток согласно предикату, // определенному в fn() Stream resStream = stream.filter(fn); // 3.5. Вывести количество фамилий, начинающихся на J System.out.println(«count color: #800080;»> public static void main(String[] args) < DemoStream(); > >
Сделал Java программу с интерфейсом / Погодное приложение
Результат выполнения программы
Enter names: name = abc name = Jlskjf name = JJ name = lskdjlsk name = sldkfjs name = dflskdj name = sdsd name = ss name = AL = [abc, Jlskjf , JJ, lskdjlsk, sldkfjs, dflskdj, sdsd, ss] count = 2
3. Сортировка строк. Пример
Условие задачи.
Задан массив строк. Используя средства StreamAPI отсортировать строки в лексикографическом порядке.
Решение. Текст програмы, решающей данную задачу, следующий.
import java.util.*; import java.util.stream.*; import java.util.function.*; public class StreamAPI < public static void main(String[] args) < // 1. Объявить произвольный массив строк String[] AS = < «abcd», «bcfk», «def», «jklmn», «jprst», «afc», «ambn», «kmk», «qrbd», «jus» >; // 2. Создать коллекцию из массива строк ArrayList AL = new ArrayList(AS.length); for (int i=0; ilength; i++) AL.add(i, AS[i]); // 3. Создать поток данных из колекции AL Stream stream = AL.stream(); // 4. Отсортировать поток в естественном порядке (по возрастанию) Stream streamSorted = stream.sorted(); // 5. Отобразить поток streamSorted // 5.1.
Определить действие, которое будет выводить один элемент потока. // Для этого используется интерфейс Consumer Consumer action = (str) -> < System.out.println(str); >; // 5.2. Отображить каждый элемент потока streamSorted.forEach(action); // 6. Отсортировать элементы потока в порядке убывания // 6.1.
Реализовать компаратор — метод, сравнивающий две строки Comparator comparator; comparator = (str1, str2) -> < return str2.compareTo(str1); // 0 >; // 6.2. Создать новый поток stream = AL.stream(); // 6.3. Отсортировать поток stream Stream streamSortedDesc = stream.sorted(comparator); // 6.4. Отобразить новый поток System.out.println(«————————«); streamSortedDesc.forEach(action); > >
Результат выполнения программы
abcd afc ambn bcfk def jklmn jprst jus kmk rbd ———————— rbd kmk jus jprst jklmn def bcfk ambn afc abcd
Связанные темы
- Примеры решения задач на потоки данных, которыми есть объекты классов
- Потоки данных Stream API. Общая информация
Источник: www.bestprog.net
Программа для поиска элементов в массиве. Пример на Java
В этой статье мы напишем простую програму для поиска определенного элемента в массиве чисел. Код программы представлен на Java.
Поиск элемента в массиве. Программа на Java
Линейный или последовательный поиск является простейшим способом найти элемент в массиве чисел. Поиск происходит поочередным сравнением элементом всего массива.
Ниже представлена Java программа поиска элементов в массиве простым перебором:
Источник: javadevblog.com