Сообщения

Сообщения за май, 2023

Generics from "Java Generics and Collections"

 -> package org.example ; import java.util.ArrayList ; import java.util.List ; public class Lists { public static < T > List < T > toList ( T [] arr ) { List < T > list = new ArrayList<>() ; for ( T elt : arr ) list .add( elt ) ; return list ; } } -> It may seem reasonable to expect that since Integer is a subtype of Number, it follows that List<Integer> is a subtype of List<Number>. But this is not the case, because the Substitution Principle would rapidly get us into trouble. It is not always safe to assign a value of type List<Integer> to a variable of type List<Number>. Consider the following code fragment: package org.example ; import java.util.ArrayList ; import java.util.List ; public class Main { public static void main ( String [] args) { List < Integer > ints = new ArrayList<>() ; ints .add( 1 ) ; ints .add( 2 ) ; List < Number &

Stream API

Intermediate or non-terminal operations: filter(),  map(),  flatMap(),  distinct(),  limit(). Terminal operations: collect(), count(), forEach(), min(), max(), reduce(), toArray(), toList(). 1. Filter -> package az.ingress.filterdomes ; import java.util.ArrayList ; import java.util.Arrays ; import java.util.List ; import java.util.function.Predicate ; public class Filterdemo1 { public static void main (String[] args) { List<Integer> numbersList = Arrays. asList ( 10 , 15 , 20 , 25 , 30 ) ; List<Integer> evenNumbersList = new ArrayList<>() ; // without using streams for ( int n : numbersList) { if (n % 2 == 0 ) evenNumbersList.add(n) ; } // with streams evenNumbersList = numbersList.stream() .filter(a -> a % 2 == 0 ).toList() ; numbersList.stream() .filter(n -> n % 2 == 0 ) .forEach(System. out ::println) ; } } -&g

Microservice_Lesson_2: Design Patterns, Creational Design Patterns