Пацей 4 сем / Лекции / СТПI_2_ООП
.pdfOptional<Integer> a = Optional.ofNullable(value1);
Optional<Integer> b = Optional.of(value2);
Log.v("test",String.valueOf(a.isPresent())); //false Log.v("test",String.valueOf(b.isPresent())); //true
содержит не null значение
Integer value3 = a.orElse(new Integer(0));
Log.v("test", value3.toString());//0
механизм результата,
Integer value4 = b.get(); |
если Optional содержит null |
|
Log.v("test", String.valueOf(value3 + value4));//10
http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
a.orElseGet( () -> 100 )
принимает функции для генерации значения по умолчанию
SDK 24 и выше
Stream API
представляет последовательность элементов и поддерживает различные виды последовательных и параллельных агрегатных операций для выполнения вычислений
C SDK
List<String> list =
Arrays.asList("a1", "a2", "a3", "b1", "c2", "c1");
list.stream()
.filter(s -> s.startsWith("a")) .sorted()
.forEach(s -> Log.v("Info", s));
Обрабатывает данные декларативно Более управляемый синтаксис - через цепочки операций Поддержка параллелизма
final Collection< Task > tasks = Arrays.asList( new Task( Status.OPEN, 5 ),
new Task( Status.OPEN, 13 ), new Task( Status.CLOSED, 8 )
);
// Подсчет общего количества очков всех активных задач с использованием s final long totalPointsOfOpenTasks = tasks
.stream()
.filter( task -> task.getStatus() == Status.OPEN )
.mapToInt( Task::getPoints )
.sum();
Optional<FileInputStream> fis =
names.stream().filter(name -> !isProcessedYet(name)) .findFirst()
.map(name -> new FileInputStream(name));
parallelStream()
Возвращает || поток
►Промежуточные операции intermediate (возвращают новый поток) /ленивые – filter, sorted, мap
►Конечные операции terminal (проходят
через поток) / поток использован – forEach, match, count
Java9
Stream.of(1,2,3,4,5,6,7,8,9,10)
.takeWhile(i -> i < 5 )
.forEach(System.out::println);
Date/Time API
►java.time
►
Local - упрощенный API с датой и временем без сложностей обработки
часовых поясов.
►Zoned- специализированный API с датой и временем для обработки различных часовых поясов.
LocalDateTime currentTime = LocalDateTime.now();
Log.i("Current DateTime " , currentTime.toString());
LocalDate date1 = currentTime.toLocalDate();
Log.i("date1: " , date1.toString());
Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond();
LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2019); Log.i("date2: " ,date2.toString());
LocalDate date3 = LocalDate.of(2018, Month.DECEMBER, 12); Log.i("date3: ", date3.toString());
LocalTime date4 = LocalTime.of(22, 15);
Log.i("date4: " , date4.toString());
LocalTime date5 = LocalTime.parse("20:15:30");
Log.i("date5: " , date5.toString());
Модульный код
Java 9
►Монолитный код jar => модульный ►Каждый модуль имеет
Имя
Код
Ресурсы
module by.bstu { }
Process API
ProcessHandle current = ProcessHandle.current(); current.info().command();
Java 9
►java.lang.ProcessHandle
►java.lang.ProcessHandle.Info
ReactiveStreamsAPI
►java.util.concurrent.Flow;
►java.util.concurrent.Flow.Publisher;
►java.util.concurrent.Flow.Subscriber; ►java.util.concurrent.Flow.Processor.
StackWalker
StackWalker.getInstance()
.walk(s -> s.limit(2). collect(Collectors.toList()));
List<StackFrame> stack = new StackWalker()
.walk((s) -> s.collect(Collectors.toList()));
Snapshot текущего потока