logo

аниМатцх() у Јави 8

У Јави 8, аниМатцх() је метод дефинисан у Стреам интерфејсу. Изводи а рад терминала кратког споја. У овом одељку ћемо разговарати о аниМатцх() метода у Јава 8 Стреам-у са примером. Пре него што пређемо на тачку, прво ћемо детаљно разумети посредне и терминалне операције.

У Јава 8 стреам, стреам операције су подељене на средњи (као Стреам.филтер, Стреам.мап) и терминал (као Стреам.форЕацх, Стеам.редуце) операције. Да бисмо добили жељене резултате, морамо комбиновати ове операције које формирају цевоводе тока.

Интермедиате Оператионс

Међуоперације су лење (значи, не обављају стварну операцију, уместо тога враћају нови ток) по природи. То значи, задржавање елемената почетног тока и увек враћање новог тока почетног тока. Имајте на уму да извршење цевовода не почиње све док се не изврши терминална операција цевовода.

мифликер

Међуоперације се даље деле на без држављанства операције (као што су филтер и мапа) и државотворан операције (као различите и сортиране).

Операција без држављанства

Операције без стања не задржавају стање претходно виђених елемената док обрађују нови елемент. Сваки елемент се може обрадити независно од операција на другим елементима.

Статефул Оператион

Операције праћења стања задржавају стање претходно виђених елемената док обрађују нове елементе. Својство операције са стањем је да обрађује цео улаз пре него што произведе резултат.

Претпоставимо да вршимо операцију сортирања преко тока и желимо да произведемо резултат из тог тока без да видимо све елементе тока што није могуће. Дакле, све док се не виде сви елементи тока, не може се произвести резултат. Дакле, морамо обрадити цео улаз пре него што произведемо резултат.

Операција терминала

Операције терминала прелазе ток да би произвеле резултат или споредни ефекат. Чим се изврши терминална операција, цевовод се сматра потрошеним. Након конзумирања, више се не може користити. У случају да захтевамо да пређемо исти извор података (стреам), вратите ток да бисте добили нови ток.

Скоро све операције терминала су жељне природе. То значи да прелазе ток и обрађују цевовод пре него што се врате. Имајте на уму да није дозвољено у операцијама са два терминала, тј. итератор() и сплитератор().

Поред наведених операција, постоји још једна операција позната као кратког споја операција. И међу и терминалним операцијама може доћи до кратког споја.

Ан међуоперација је кратки спој ако постоји ток са бесконачним улазом. Као резултат, може произвести коначан ток.

алатка за сечење у убунту

А рад терминала је кратки спој ако постоји ток са бесконачним улазом. Може се завршити у коначном времену.

Примећујемо да је коришћење операције кратког споја у цевоводу неопходно, али није довољно. Постоји услов за обраду бесконачног тока који је нормално прекинути рад у коначном времену.

Јава 8 Стреам.аниМатцх()

Враћа да ли се било који елемент овог тока подудара са наведеним предикатом. Можда неће проценити предикат на свим елементима ако није неопходно за одређивање резултата.

Синтакса:

 boolean anyMatch(Predicate predicate) 

Параметри: Прихвата а немешање и без држављанства предикат који треба применити на елементе улазног тока.

враћа: Враћа се истина ако се било који елемент поклапа са наведеним предикатом, иначе враћа фалсе. Враћа нетачно ако је ток празан. У случају празног тока, предикат се не вреднује.

Јава аниМатцх() Пример

АниМатцхЕкампле1.јава

 import java.util.stream.Stream; public class AnyMatchExample1 { public static void main(String args[]) { Stream stream = Stream.of('Java', 'Python', 'Hadoop', 'C#', 'C++', 'Kotlin'); boolean match = stream.anyMatch(s -> s.contains('Python')); System.out.println(match); } } 

Излаз:

 true 

Следећи пример приказује празан ток увек враћа фалсе.

АниМатцхЕкампле2.јава

говинда глумац
 import java.util.Arrays; public class AnyMatchExample2 { public static void main(String args[]) { boolean b = Arrays.asList().stream().anyMatch(e -> true); System.out.println(b); } } 

Излаз:

 false 

Хајде да видимо још један Јава програм у коме смо анализирали више предиката.

Да бисте задовољили више услова, креирајте сложени предикат са два или више једноставних предиката. У датом примеру имамо листу запослених. Желимо да проверимо да ли постоји запослени који имају 28 година и име почиње на слово Р. Следећи Јава програм приказује исто.

АниМатцхЕкампле.јава

 import java.util.List; import java.util.function.Predicate; import java.util.ArrayList; class Employee { int empId; int empAge; String empName; //creating a constructor of the Employee class Employee(int id, int age, String name) { this.empId = id; this.empAge = age; this.empName = name; } public int getEmpId() { return empId; } public int getEmpAge() { return empAge; } public String getEmpName() { return empName; } public static List getEmployee() { //instance of the List class List list = new ArrayList(); //adding elements to the List list.add(new Employee(21, 21, &apos;Andrew&apos;)); list.add(new Employee(23, 28, &apos;Robert&apos;)); list.add(new Employee(32, 29, &apos;Jack&apos;)); list.add(new Employee(12, 31, &apos;Steve&apos;)); list.add(new Employee(15, 27, &apos;Tom&apos;)); list.add(new Employee(19, 29, &apos;Albert&apos;)); return list; } } //driver code public class AnyMatchExample { public static void main(String args[]) { //defining predicates Predicate p1 = e -&gt; e.empName.startsWith(&apos;S&apos;); Predicate p2 = e -&gt; e.empAge <28 && e.empname.startswith('r'); predicate p3="e" -> e.empName.startsWith(&apos;P&apos;); List list = Employee.getEmployee(); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool1 = list.stream().anyMatch(p1); //prints true if any element of the List starts with the letter s, else prints false System.out.println(bool1); boolean bool2 = list.stream().anyMatch(p2); //prints true if any element of the List starts with the letter z and age is less than 28, else prints false System.out.println(bool2); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool3 = list.stream().anyMatch(p3); //prints true if any element of the List starts with the letter P, else prints false System.out.println(bool3); } } </28>

Излаз:

 true true false 

Интерфејс Стреам пружа још један метод за подударање наведеног предиката, тј. аллМатцх() . Разлика између аллМатцх() и аниМатцх() је у томе што се аниМатцх() враћа истина ако се било који од елемената у току подудара са наведеним предикатом. Када користите аллМатцх(), сви елементи морају одговарати датом предикату.

Стога, метод аниМатцх() се може користити у одређеном случају када желимо да проверимо да ли постоји бар један елемент у току. Метод цонтаинс() класе Лист такође обавља исту операцију. Дакле, такође можемо да користимо метод цонтаинс() уместо методе аниМатцх().

Дакле, нема разлике између метода Лист.цонтаинс() и Стреам.аниМатцх().