top 40 java 8 interview questions answers
În acest tutorial, am furnizat cele mai importante întrebări de interviuri Java 8 și răspunsurile acestora, cu exemple de cod și explicație:
Toate întrebările importante enumerate în acest tutorial sunt specifice Java 8. Java a evoluat foarte mult (de-a lungul timpului) odată cu introducerea de noi versiuni. Cu fiecare versiune, avem noi caracteristici asociate cu Java. Toate aceste caracteristici importante vor fi acoperite în acest tutorial.
Acestea sunt întrebări foarte frecvente pe care vi le veți pune în orice interviuri Java care necesită abilități avansate. Aceste concepte sunt indispensabile dacă doriți să apăreați pentru examene de certificare Java standard, cum ar fi Oracle Certified Associate (OCA).
=> Consultați aici Ghidul pentru începători Java.
Acest articol va fi foarte potrivit atât pentru dezvoltatorii Java, cât și pentru Java Testers / Automation Testers sau pentru oricine caută salarii mai mari în același domeniu, deoarece necesită abilități Java avansate.
Cele mai frecvente întrebări de interviu Java 8
Q # 1) Enumerați noile caracteristici introduse în Java 8?
Răspuns: Noile caracteristici introduse în Java 8 sunt prezentate mai jos:
- Expresii Lambda
- Referințe la metodă
- Clasa opțională
- Interfață funcțională
- Metode implicite
- Rinocer, motor JavaScript
- API Stream
- API Data
Q # 2) Ce sunt interfețele funcționale?
Răspuns: Interfața funcțională este o interfață care are o singură metodă abstractă. Implementarea acestor interfețe este asigurată folosind o Expresie Lambda, ceea ce înseamnă că, pentru a utiliza Expresia Lambda, trebuie să creați o nouă interfață funcțională sau puteți utiliza funcția predefinită interfață funcțională a Java 8 .
Adnotarea utilizată pentru crearea unei noi interfețe funcționale este „ @FunctionalInterface ”.
Î. 3) Ce este o clasă opțională?
Răspuns: Clasa opțională este o clasă specială de împachetare introdusă în Java 8 care este utilizată pentru a evita excepțiile NullPointer. Această clasă finală este prezentă sub pachetul java.util. NullPointerExceptions apare atunci când nu reușim să efectuăm verificările Null.
Q # 4) Care sunt metodele implicite?
Răspuns: Metodele implicite sunt metodele interfeței care are un corp. Aceste metode, după cum sugerează și numele, utilizează cuvintele cheie implicite. Utilizarea acestor metode implicite este „Compatibilitate inversă”, ceea ce înseamnă că dacă JDK modifică orice interfață (fără metoda implicită), atunci clasele care implementează această interfață se vor rupe.
Pe de altă parte, dacă adăugați metoda implicită într-o interfață, atunci veți putea furniza implementarea implicită. Acest lucru nu va afecta clasele de implementare.
Sintaxă:
public interface questions{ default void print() { System.out.println('www.softwaretestinghelp.com'); } }
Q # 5) Care sunt principalele caracteristici ale funcției Lambda?
Răspuns: Principalele caracteristici ale funcției Lambda sunt următoarele:
- O metodă definită ca Expresie Lambda poate fi transmisă ca parametru către o altă metodă.
- O metodă poate exista independentă fără a aparține unei clase.
- Nu este necesar să declarați tipul de parametru, deoarece compilatorul poate prelua tipul din valoarea parametrului.
- Putem folosi paranteze atunci când folosim mai mulți parametri, dar nu este necesar să avem paranteză atunci când folosim un singur parametru.
- Dacă corpul de expresie are o singură afirmație, atunci nu este nevoie să includeți acolade.
Q # 6) Ce era în neregulă cu data și ora vechi?
Răspuns: Mai jos sunt enumerate dezavantajele datei și orei vechi:
- Java.util.Date este modificabil și nu este sigur pentru fire, în timp ce noua API Java 8 Date și Time este sigur pentru fire.
- Java 8 Date and Time API îndeplinește standardele ISO, în timp ce data și ora vechi au fost prost concepute.
- A introdus mai multe clase API pentru o dată precum LocalDate, LocalTime, LocalDateTime etc.
- Vorbind despre performanța dintre cele două, Java 8 funcționează mai repede decât vechiul regim de dată și oră.
Q # 7) Care este diferența dintre API-ul de colecție și API-ul Stream?
Răspuns: Diferența dintre API-ul Stream și API-ul de colecție poate fi înțeleasă din tabelul de mai jos:
API Stream | API de colecție |
---|---|
A fost introdus în versiunea Java 8 Standard Edition. | A fost introdus în versiunea Java 1.2 |
Nu se utilizează Iteratorul și Spliteratoarele. | Cu ajutorul forEach, putem folosi Iteratorul și Spliteratoarele pentru a itera elementele și a efectua o acțiune asupra fiecărui element sau element. |
Un număr infinit de caracteristici pot fi stocate. | Un număr numărabil de elemente poate fi stocat. |
Consumul și repetarea elementelor din obiectul Stream se pot face o singură dată. | Consumul și repetarea elementelor din obiectul Colecție se pot face de mai multe ori. |
Este folosit pentru a calcula date. | Este folosit pentru a stoca date. |
Q # 8) Cum puteți crea o interfață funcțională?
Răspuns: Deși Java poate identifica o interfață funcțională, puteți defini una cu adnotarea
@FunctionalInterface
După ce ați definit interfața funcțională, puteți avea o singură metodă abstractă. Deoarece aveți o singură metodă abstractă, puteți scrie mai multe metode statice și metode implicite.
Mai jos este exemplul de programare a FunctionalInterface scris pentru multiplicarea a două numere.
@FunctionalInterface // annotation for functional interface interface FuncInterface { public int multiply(int a, int b); } public class Java8 { public static void main(String args[]) { FuncInterface Total = (a, b) -> a * b; // simple operation of multiplication of 'a' and 'b' System.out.println('Result: '+Total.multiply(30, 60)); } }
Ieșire:
Q # 9) Ce este o interfață SAM?
Răspuns: Java 8 a introdus conceptul de Interfață funcțională care poate avea o singură metodă abstractă. Deoarece aceste interfețe specifică o singură metodă abstractă, ele sunt uneori numite ca interfețe SAM. SAM reprezintă „Metoda abstractă unică”.
Q # 10) Ce este Metoda de referință?
este lista cu linkuri java dublu legată
Răspuns: În Java 8, a fost introdusă o nouă caracteristică cunoscută sub numele de Method Reference. Aceasta este utilizată pentru a se referi la metoda interfeței funcționale. Poate fi folosit pentru a înlocui expresia Lambda în timp ce se referă la o metodă.
De exemplu: Dacă Expresia Lambda arată
num -> System.out.println(num)
Apoi, metoda de referință corespunzătoare ar fi,
System.out::println
unde „::” este un operator care distinge numele clasei de numele metodei.
Q # 11) Explicați următoarea sintaxă
String:: Valueof Expression
Răspuns: Este o metodă statică de referință la Valoarea metoda Şir clasă. System.out :: println este o metodă statică de referință la metoda println a obiectului out din clasa System.
Returnează reprezentarea șir corespunzătoare a argumentului care este trecut. Argumentul poate fi caracter, întreg, boolean și așa mai departe.
Q # 12) Ce este un predicat? Spuneți diferența dintre un predicat și o funcție?
Răspuns: Predicat este o interfață funcțională predefinită. Se află sub pachetul java.util.function.Predicate. Acceptă doar un singur argument care este în forma așa cum se arată mai jos,
Predicat
Predicat | Funcţie |
---|---|
Are tipul returnat ca Boolean. | Are tipul returnat ca obiect. |
Este scris sub forma de Predicat care acceptă un singur argument. | Este scris sub forma de Funcţie care acceptă și un singur argument. |
Este o interfață funcțională care este utilizată pentru a evalua expresiile Lambda. Aceasta poate fi utilizată ca țintă pentru o referință de metodă. | Este, de asemenea, o interfață funcțională care este utilizată pentru a evalua expresiile Lambda. În Funcție, T este pentru tipul de intrare și R este pentru tipul de rezultat. Acest lucru poate fi, de asemenea, utilizat ca țintă pentru o expresie și referință de metodă Lambda. |
Q # 13) Este ceva în neregulă cu următorul cod? Va compila sau va da vreo eroare specifică?
@FunctionalInterface public interface Test { public C apply(A a, B b); default void printString() { System.out.println('softwaretestinghelp'); } }
Răspuns: Da. Codul se va compila deoarece urmează specificația interfeței funcționale de a defini doar o singură metodă abstractă. A doua metodă, printString (), este o metodă implicită care nu se ia în considerare ca metodă abstractă.
Q # 14) Ce este un API Stream? De ce avem nevoie de API-ul Stream?
Răspuns: API-ul Stream este o nouă caracteristică adăugată în Java 8. Este o clasă specială care este utilizată pentru procesarea obiectelor dintr-o sursă precum Collection.
Avem nevoie de API-ul Stream, deoarece
- Suportă operațiuni de agregare, ceea ce face procesarea simplă.
- Suportă programarea în stil funcțional.
- Procesează mai rapid. Prin urmare, este potrivit pentru performanțe mai bune.
- Permite operațiuni paralele.
Q # 15) Care este diferența dintre limit și skip?
Răspuns: Metoda limit () este utilizată pentru a returna fluxul de dimensiunea specificată. De exemplu, Dacă ați menționat limita (5), atunci numărul de elemente de ieșire ar fi 5.
Să luăm în considerare următorul exemplu. Ieșirea aici returnează șase elemente, deoarece limita este setată la „șase”.
import java.util.stream.Stream; public class Java8 { public static void main(String[] args) { Stream.of(0,1,2,3,4,5,6,7,8) .limit(6) /*limit is set to 6, hence it will print the numbers starting from 0 to 5 */ .forEach(num->System.out.print('
'+num)); } }
Ieșire:
În timp ce metoda skip () este utilizată pentru a sări peste element.
Să luăm în considerare următorul exemplu. În ieșire, elementele sunt 6, 7, 8 ceea ce înseamnă că a omis elementele până la al 6-lea index (începând de la 1).
import java.util.stream.Stream; public class Java8 { public static void main(String[] args) { Stream.of(0,1,2,3,4,5,6,7,8) .skip(6) /* It will skip till 6th index. Hence 7th, 8th and 9th index elements will be printed */ .forEach(num->System.out.print('
'+num)); } }
Ieșire:
Q # 16) Cum veți obține data și ora curente folosind Java 8 Date and Time API?
Răspuns: Programul de mai jos este scris cu ajutorul noului API introdus în Java 8. Am folosit utilizarea LocalDate, LocalTime și LocalDateTime API pentru a obține data și ora curente.
În prima și a doua declarație de tipărire, am recuperat data și ora curente din ceasul sistemului, cu fusul orar setat ca implicit. În cea de-a treia declarație de imprimare, am folosit API LocalDateTime care va imprima atât data cât și ora.
class Java8 { public static void main(String[] args) { System.out.println('Current Local Date: ' + java.time.LocalDate.now()); //Used LocalDate API to get the date System.out.println('Current Local Time: ' + java.time.LocalTime.now()); //Used LocalTime API to get the time System.out.println('Current Local Date and Time: ' + java.time.LocalDateTime.now()); //Used LocalDateTime API to get both date and time } }
Ieșire:
Q # 17) Care este scopul metodei limit () în Java 8?
Răspuns: Metoda Stream.limit () specifică limita elementelor. Mărimea pe care o specificați în limită (X), va returna fluxul de dimensiunea „X”. Este o metodă de java.util.stream.Stream
Sintaxă:
limit(X)
Unde „X” este dimensiunea elementului.
Q # 18) Scrieți un program pentru a tipări 5 numere aleatoare folosind forEach în Java 8?
Răspuns: Programul de mai jos generează 5 numere aleatoare cu ajutorul forEach în Java 8. Puteți seta variabila limită la orice număr, în funcție de câte numere aleatoare doriți să generați.
import java.util.Random; class Java8 { public static void main(String[] args) { Random random = new Random(); random.ints().limit(5).forEach(System.out::println); /* limit is set to 5 which means only 5 numbers will be printed with the help of terminal operation forEach */ } }
Ieșire:
Q # 19) Scrieți un program pentru a imprima 5 numere aleatorii în ordine sortată folosind forEach în Java 8?
Răspuns: Programul de mai jos generează 5 numere aleatoare cu ajutorul forEach în Java 8. Puteți seta variabila limită la orice număr, în funcție de câte numere aleatoare doriți să generați. Singurul lucru pe care trebuie să-l adăugați aici este metoda sorted ().
import java.util.Random; class Java8 { public static void main(String[] args) { Random random = new Random(); random.ints().limit(5).sorted().forEach(System.out::println); /* sorted() method is used to sort the output after terminal operation forEach */ } }
Ieșire:
Q # 20) Care este diferența dintre operațiunile intermediare și operațiunile terminale în flux?
cel mai bun software gratuit pentru copierea DVD-urilor
Răspuns: Toate operațiunile fluxului sunt fie terminale, fie intermediare. Operațiunile intermediare sunt operațiunile care returnează fluxul, astfel încât să poată fi efectuate alte operații pe acel flux. Operațiunile intermediare nu procesează fluxul la locul apelului, prin urmare sunt numite leneș.
Aceste tipuri de operațiuni (operațiuni intermediare) procesează date atunci când se efectuează o operațiune terminală. Exemple de operare intermediară sunt harta și filtrul.
Operațiunile terminale inițiază procesarea fluxului. În timpul acestui apel, Fluxul suferă toate operațiunile intermediare. Exemple ale operațiunii Terminal sunt sumă, colectare și pentru fiecare.
În acest program, încercăm mai întâi să executăm operația intermediară fără operația Terminal. După cum puteți vedea, primul bloc de cod nu se va executa, deoarece nu este acceptată nicio operațiune Terminal.
Al doilea bloc a fost executat cu succes din cauza operației Terminal sum ().
import java.util.Arrays; class Java8 { public static void main(String[] args) { System.out.println('Intermediate Operation won't execute'); Arrays.stream(new int[] { 0, 1 }).map(i -> { System.out.println(i); return i; // No terminal operation so it won't execute }); System.out.println('Terminal operation starts here'); Arrays.stream(new int[] { 0, 1 }).map(i -> { System.out.println(i); return i; // This is followed by terminal operation sum() }).sum(); } }
Ieșire:
Q # 21) Scrieți un program Java 8 pentru a obține suma tuturor numerelor prezente într-o listă?
Răspuns: În acest program, am folosit ArrayList pentru a stoca elementele. Apoi, cu ajutorul metodei sum (), am calculat suma tuturor elementelor prezente în ArrayList. Apoi este convertit în Stream și adăugat fiecare element cu ajutorul metodelor mapToInt () și sum ().
import java.util.*; class Java8 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(10); list.add(20); list.add(30); list.add(40); list.add(50); // Added the numbers into Arraylist System.out.println(sum(list)); } public static int sum(ArrayList list) { return list.stream().mapToInt(i -> i).sum(); // Found the total using sum() method after // converting it into Stream } }
Ieșire:
Q # 22) Scrieți un program Java 8 pentru a păstra lista numerelor și apoi filtrați numerele mai mari de 100 și apoi găsiți media numerelor rămase?
Răspuns: În acest program, am luat o matrice de numere întregi și le-am stocat într-o listă. Apoi, cu ajutorul mapToInt (), am pătrat elementele și am filtrat numerele mai mari de 100. În cele din urmă, se calculează media numărului rămas (mai mare de 100).
import java.util.Arrays; import java.util.List; import java.util.OptionalDouble; public class Java8 { public static void main(String[] args) { Integer[] arr = new Integer[] { 100, 100, 9, 8, 200 }; List list = Arrays.asList(arr); // Stored the array as list OptionalDouble avg = list.stream().mapToInt(n -> n * n).filter(n -> n > 100).average(); /* Converted it into Stream and filtered out the numbers which are greater than 100. Finally calculated the average */ if (avg.isPresent()) System.out.println(avg.getAsDouble()); } }
Ieșire:
Q # 23) Care este diferența dintre findFirst () și findAny () de la Stream?
Răspuns: După cum sugerează și numele, metoda findFirst () este utilizată pentru a găsi primul element din flux, în timp ce metoda findAny () este utilizată pentru a găsi orice element din flux.
FindFirst () are un caracter predestinarian, în timp ce findAny () nu este determinist. În programare, determinist înseamnă că ieșirea se bazează pe intrarea sau starea inițială a sistemului.
Q # 24) Care este diferența dintre Iterator și Spliterator?
Răspuns: Mai jos sunt diferențele dintre Iterator și Spliterator.
Iterator | Splitter |
---|---|
A fost introdus în versiunea Java 1.2 | A fost introdus în Java SE 8 |
Este folosit pentru API-ul de colecție. | Este utilizat pentru API-ul Stream. |
Unele dintre metodele iterate sunt next () și hasNext () care sunt utilizate pentru a itera elemente. | Metoda Spliterator este tryAdvance (). |
Trebuie să apelăm metoda iterator () pe obiectul de colecție. | Trebuie să apelăm metoda spliterator () pe Stream Object. |
Iterează numai în ordine secvențială. | Iterează în ordine paralelă și secvențială. |
Q # 25) Ce este interfața funcțională a consumatorului?
Răspuns: Interfața funcțională a consumatorului este, de asemenea, o interfață cu un singur argument (cum ar fi Predicate și Function). Se află sub java.util.function.Consumer. Aceasta nu returnează nicio valoare.
În programul de mai jos, am folosit metoda accept pentru a recupera valoarea obiectului String.
import java.util.function.Consumer; public class Java8 { public static void main(String[] args) Consumer str = str1 -> System.out.println(str1); str.accept('Saket'); /* We have used accept() method to get the value of the String Object */ } }
Ieșire:
Q # 26) Ce este interfața funcțională a furnizorului?
Răspuns: Interfața funcțională a furnizorului nu acceptă parametrii de intrare. Se află sub java.util.function.Supplier. Aceasta returnează valoarea utilizând metoda get.
În programul de mai jos, am folosit metoda get pentru a recupera valoarea obiectului String.
import java.util.function.Supplier; public class Java8 { public static void main(String[] args) { Supplier str = () -> 'Saket'; System.out.println(str.get()); /* We have used get() method to retrieve the value of String object str. */ } }
Ieșire:
Q # 27) Ce este Nashorn în Java 8?
Răspuns: Nashorn în Java 8 este un motor bazat pe Java pentru executarea și evaluarea codului JavaScript.
Q # 28) Scrieți un program Java 8 pentru a găsi cel mai mic și cel mai mare număr de flux?
Răspuns: În acest program, am folosit metode min () și max () pentru a obține cel mai mare și cel mai mic număr de flux. În primul rând, am inițializat un flux care are numere întregi și cu ajutorul metodei Comparator.comparing () am comparat elementele fluxului.
Când această metodă este încorporată cu max () și min (), aceasta vă va oferi cele mai mari și cele mai mici numere. De asemenea, va funcționa atunci când se compară șirurile.
import java.util.Comparator; import java.util.stream.*; public class Java8{ public static void main(String args[]) { Integer highest = Stream.of(1, 2, 3, 77, 6, 5) .max(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ Integer lowest = Stream.of(1, 2, 3, 77, 6, 5) .min(Comparator.comparing(Integer::valueOf)) .get(); /* We have used max() method with Comparator.comparing() method to compare and find the highest number */ System.out.println('The highest number is: ' + highest); System.out.println('The lowest number is: ' + lowest); } }
Ieșire:
Q # 29) Care este diferența dintre funcționarea fluxului MapMap și flatMap?
Răspuns: Operațiunea Map Stream oferă o valoare de ieșire pentru fiecare valoare de intrare, în timp ce operația FlatMap Stream oferă o valoare de ieșire zero sau mai mare per valoare de intrare.
Exemplu de hartă- Operațiunea Map Stream este în general utilizată pentru o operare simplă pe Stream, cum ar fi cea menționată mai jos.
În acest program, am schimbat caracterele „Nume” în litere mari folosind operația de hartă după stocarea lor într-un flux și cu ajutorul operației pentru fiecare terminal, am imprimat fiecare element.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Map { public static void main(String[] str) { List Names = Arrays.asList('Saket', 'Trevor', 'Franklin', 'Michael'); List UpperCase = Names.stream().map(String::toUpperCase).collect(Collectors.toList()); // Changed the characters into upper case after converting it into Stream UpperCase.forEach(System.out::println); // Printed using forEach Terminal Operation } }
Ieșire:
flatMap Exemplu- operațiunea FlatMap Stream este utilizată pentru o operațiune Stream mai complexă.
Aici am efectuat operațiunea flatMap pe „Lista listei de tip String”. Am dat nume de intrare ca listă și apoi le-am stocat într-un flux pe care am filtrat numele care încep cu „S”.
În cele din urmă, cu ajutorul operației pentru fiecare terminal, am imprimat fiecare element.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class flatMap { public static void main(String[] str) { List Names = Arrays.asList(Arrays.asList('Saket', 'Trevor'), Arrays.asList('John', 'Michael'), Arrays.asList('Shawn', 'Franklin'), Arrays.asList('Johnty', 'Sean')); /* Created a “List of List of type String” i.e. List Stored names into the list */ List Start = Names.stream().flatMap(FirstName -> FirstName.stream()).filter(s -> s.startsWith('S')) .collect(Collectors.toList()); /* Converted it into Stream and filtered out the names which start with 'S' */ Start.forEach(System.out::println); /* Printed the Start using forEach operation */ } }
Ieșire:
Q # 30) Ce este MetaSpace în Java 8?
Răspuns: În Java 8, a fost introdusă o nouă caracteristică pentru stocarea claselor. Zona în care toate clasele care sunt stocate în Java 8 se numește MetaSpace. MetaSpace a înlocuit PermGen.
Până la Java 7, PermGen a fost folosit de Java Virtual Machine pentru a stoca clasele. Deoarece MetaSpace este dinamic, deoarece poate crește dinamic și nu are nicio limitare a dimensiunii, Java 8 a înlocuit PermGen cu MetaSpace.
Q # 31) Care este diferența dintre iterația internă și externă Java 8?
Răspuns: Diferența dintre iterația internă și cea externă este prezentată mai jos.
Iterare internă | Iterare externă |
---|---|
A fost introdus în Java 8 (JDK-8). | A fost introdus și practicat în versiunea anterioară a Java (JDK-7, JDK-6 și așa mai departe). |
Iterează intern pe obiectele agregate, cum ar fi Colecția. | Iterează extern pe obiectele agregate. |
Suportă stilul de programare funcțional. | Suportă stilul de programare OOPS. |
Iteratorul intern este pasiv. | Iteratorul extern este activ. |
Este mai puțin eronat și necesită mai puțină codificare. | Necesită puțin mai multă codificare și este mai predispus la erori. |
Q # 32) Ce este JJS?
Răspuns: JJS este un instrument de linie de comandă utilizat pentru a executa cod JavaScript la consolă. În Java 8, JJS este noul executabil care este un motor JavaScript.
Q # 33) Ce este ChronoUnits în Java 8?
Răspuns: ChronoUnits este enum-ul care este introdus pentru a înlocui valorile Integer care sunt utilizate în vechiul API pentru reprezentarea lunii, zilei etc.
Q # 34) Explicați clasa StringJoiner în Java 8? Cum putem realiza alăturarea mai multor șiruri folosind Clasa StringJoiner?
Răspuns: În Java 8, a fost introdusă o nouă clasă în pachetul java.util, cunoscut sub numele de StringJoiner. Prin această clasă, putem uni mai multe șiruri separate de delimitatori împreună cu furnizarea prefixului și a sufixului acestora.
În programul de mai jos, vom afla despre alăturarea mai multor șiruri folosind StringJoiner Class. Aici avem „,” ca delimitator între două șiruri diferite. Apoi am unit cinci șiruri diferite adăugându-le cu ajutorul metodei add (). În cele din urmă, a imprimat String Joiner.
În următoarea întrebare # 35, veți afla despre adăugarea de prefix și sufix la șir.
import java.util.StringJoiner; public class Java8 { public static void main(String[] args) { StringJoiner stj = new StringJoiner(','); // Separated the elements with a comma in between. stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Ieșire:
Q # 35) Scrieți un program Java 8 pentru a adăuga prefix și sufix la șir?
Răspuns: În acest program, avem „,” ca delimitator între două șiruri diferite. De asemenea, am dat paranteze „(” și „)” ca prefix și sufix. Apoi, cinci șiruri diferite sunt unite prin adăugarea lor cu ajutorul metodei add (). În cele din urmă, a imprimat String Joiner.
import java.util.StringJoiner; public class Java8 { public static void main(String[] args) { StringJoiner stj = new StringJoiner(',', '(', ')'); // Separated the elements with a comma in between. //Added a prefix '(' and a suffix ')' stj.add('Saket'); stj.add('John'); stj.add('Franklin'); stj.add('Ricky'); stj.add('Trevor'); // Added elements into StringJoiner “stj” System.out.println(stj); } }
Ieșire:
Q # 36) Scrieți un program Java 8 pentru a itera un flux folosind metoda forEach?
Răspuns: În acest program, iterăm un flux pornind de la „număr = 2”, urmat de variabila de numărare incrementată cu „1” după fiecare iterație.
Apoi, filtrăm numărul al cărui rest nu este zero atunci când este împărțit la numărul 2. De asemenea, am stabilit limita ca? 5 ceea ce înseamnă doar de 5 ori va itera. În cele din urmă, imprimăm fiecare element folosind forEach.
import java.util.stream.*; public class Java8 { public static void main(String[] args){ Stream.iterate(2, count->count+1) // Counter Started from 2, incremented by 1 .filter(number->number%2==0) // Filtered out the numbers whose remainder is zero // when divided by 2 .limit(5) // Limit is set to 5, so only 5 numbers will be printed .forEach(System.out::println); } }
Ieșire:
Q # 37) Scrieți un program Java 8 pentru a sorta o matrice și apoi converti matricea sortată în Stream?
Răspuns: În acest program, am folosit sortare paralelă pentru a sorta o serie de numere întregi. Apoi am convertit matricea sortată în Stream și, cu ajutorul forEach, am imprimat fiecare element al unui Stream.
primele 10 companii de cercetare de piață din lume
import java.util.Arrays; public class Java8 { public static void main(String[] args) { int arr[] = { 99, 55, 203, 99, 4, 91 }; Arrays.parallelSort(arr); // Sorted the Array using parallelSort() Arrays.stream(arr).forEach(n -> System.out.print(n + ' ')); /* Converted it into Stream and then printed using forEach */ } }
Ieșire:
Q # 38) Scrieți un program Java 8 pentru a găsi numărul de șiruri dintr-o listă a cărei lungime este mai mare de 5?
Răspuns: În acest program, patru șiruri sunt adăugate în listă folosind metoda add (), apoi cu ajutorul expresiei Stream și Lambda, am numărat șirurile care au o lungime mai mare de 5.
import java.util.ArrayList; import java.util.List; public class Java8 { public static void main(String[] args) { List list = new ArrayList(); list.add('Saket'); list.add('Saurav'); list.add('Softwaretestinghelp'); list.add('Steve'); // Added elements into the List long count = list.stream().filter(str -> str.length() > 5).count(); /* Converted the list into Stream and filtering out the Strings whose length more than 5 and counted the length */ System.out.println('We have ' + count + ' strings with length greater than 5'); } }
Ieșire:
Q # 39) Scrieți un program Java 8 pentru a concatena două fluxuri?
Răspuns: În acest program, am creat două fluxuri din cele două liste deja create și apoi le-am concatenat folosind o metodă concat () în care două liste sunt transmise ca argument. În cele din urmă, a tipărit elementele fluxului concatenat.
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Java8 { public static void main(String[] args) { List list1 = Arrays.asList('Java', '8'); List list2 = Arrays.asList('explained', 'through', 'programs'); Stream concatStream = Stream.concat(list1.stream(), list2.stream()); // Concatenated the list1 and list2 by converting them into Stream concatStream.forEach(str -> System.out.print(str + ' ')); // Printed the Concatenated Stream } }
Ieșire:
Q # 40) Scrieți un program Java 8 pentru a elimina elementele duplicate din listă?
Răspuns: În acest program, am stocat elementele într-o matrice și le-am convertit într-o listă. Ulterior, am folosit fluxul și l-am colectat în „Set” cu ajutorul metodei „Collectors.toSet ()”.
import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class Java8 { public static void main(String[] args) { Integer[] arr1 = new Integer[] { 1, 9, 8, 7, 7, 8, 9 }; List listdup = Arrays.asList(arr1); // Converted the Array of type Integer into List Set setNoDups = listdup.stream().collect(Collectors.toSet()); // Converted the List into Stream and collected it to “Set” // Set won't allow any duplicates setNoDups.forEach((i) -> System.out.print(' ' + i)); } }
Ieșire:
Concluzie
În acest articol, am înțeles noile caracteristici introduse în Java 8. Am acoperit în detaliu toate întrebările majore ale interviului Java 8 și răspunsurile acestora.
La citirea acestui tutorial, trebuie să fi dobândit cunoștințe despre noile API-uri pentru manipularea datei-timp, noi caracteristici ale Java 8, noi API-uri de streaming, împreună cu exemplele de programare apt conform conceptului. Aceste noi concepte sau caracteristici fac parte din procesul de interviu atunci când vă pregătiți pentru pozițiile Java mai provocatoare.
Toate cele bune!!
=> Verificați TOATE Tutorialele Java aici.
Lectură recomandată
- Întrebări și răspunsuri la interviu
- Întrebări și răspunsuri la interviuri de testare ETL
- Câteva întrebări și răspunsuri dificile de testare manuală
- Top 40 C Întrebări și răspunsuri la interviu de programare
- Top 40 de întrebări și răspunsuri populare despre interviurile J2EE pe care ar trebui să le citiți
- Întrebări de interviu cu răspunsuri Spock (Cele mai populare)
- Cele mai bune 25 de întrebări și răspunsuri de interviu pentru testarea agilă
- Top 32 Cele mai bune întrebări și răspunsuri pentru interviul Datastage