top 40 java 8 interview questions answers
このチュートリアルでは、最も重要なJava8インタビューの質問とその回答をコード例と説明とともに提供しました。
このチュートリアルにリストされているすべての重要な質問は、Java 8に固有のものです。Javaは、新しいバージョンの導入により、(時間の経過とともに)大きく進化してきました。各バージョンには、Javaに関連する新機能があります。これらの重要な機能はすべて、このチュートリアルで説明します。
これらは非常に一般的な質問であり、高度なスキルを必要とするJavaインタビューで尋ねられます。これらの概念は、Oracle Certified Associate(OCA)などの標準的なJava認定試験に出題される場合に必須です。
この記事は、Java開発者だけでなく、Javaテスター/自動化テスター、または高度なJavaスキルを必要とするため、同じ分野でより高い賃金を求めている人の両方に非常に適しています。
最もよくあるJava8インタビューの質問
Q#1)Java 8で導入された新機能をリストアップしますか?
回答: Java8で導入された新機能を以下に示します。
- ラムダ式
- メソッドリファレンス
- オプションクラス
- 機能インターフェイス
- デフォルトのメソッド
- Rhinoceros、JavaScriptエンジン
- ストリームAPI
- 日付API
Q#2)機能インターフェイスとは何ですか?
回答: 機能インターフェイスは、抽象メソッドが1つしかないインターフェイスです。これらのインターフェースの実装は、ラムダ式を使用して提供されます。つまり、ラムダ式を使用するには、新しい関数型インターフェースを作成するか、事前定義されたインターフェースを使用できます。 Java8の関数型インターフェース 。
新しい関数型インターフェースの作成に使用される注釈は「 @FunctionalInterface 」。
Q#3)オプションのクラスとは何ですか?
回答: オプションのクラスは、Java 8で導入された特別なラッパークラスであり、NullPointerExceptionsを回避するために使用されます。この最後のクラスは、java.utilパッケージの下にあります。 NullPointerExceptionsは、Nullチェックの実行に失敗した場合に発生します。
Q#4)デフォルトの方法は何ですか?
回答: デフォルトのメソッドは、本体を持つインターフェースのメソッドです。これらのメソッドは、その名前が示すように、デフォルトのキーワードを使用します。これらのデフォルトメソッドの使用は「下位互換性」です。これは、JDKが(デフォルトメソッドなしで)インターフェイスを変更すると、このインターフェイスを実装するクラスが破損することを意味します。
一方、インターフェイスにデフォルトのメソッドを追加すると、デフォルトの実装を提供できるようになります。これは、実装クラスには影響しません。
構文:
public interface questions{ default void print() { System.out.println('www.softwaretestinghelp.com'); } }
Q#5) ラムダ関数の主な特徴は何ですか?
回答: ラムダ関数の主な特徴は次のとおりです。
- ラムダ式として定義されているメソッドは、パラメーターとして別のメソッドに渡すことができます。
- メソッドは、クラスに属さずにスタンドアロンで存在できます。
- コンパイラはパラメータの値から型をフェッチできるため、パラメータ型を宣言する必要はありません。
- 複数のパラメーターを使用する場合は括弧を使用できますが、単一のパラメーターを使用する場合は括弧を使用する必要はありません。
- 式の本体に単一のステートメントがある場合は、中括弧を含める必要はありません。
Q#6) 古い日時の何が問題だったのですか?
回答: 以下に、古い日付と時刻の欠点を示します。
- Java.util.Dateは変更可能であり、スレッドセーフではありませんが、新しいJava 8 Date and TimeAPIはスレッドセーフです。
- Java 8 Date and Time APIはISO標準を満たしていますが、古い日付と時刻は適切に設計されていません。
- LocalDate、LocalTime、LocalDateTimeなどの日付のAPIクラスがいくつか導入されています。
- 2つの間のパフォーマンスについて言えば、Java8は以前の日付と時刻のレジームよりも高速に動作します。
Q#7)コレクションAPIとストリームAPIの違いは何ですか?
回答: StreamAPIとCollectionAPIの違いは、以下の表から理解できます。
ストリームAPI | コレクションAPI |
---|---|
Java 8 StandardEditionバージョンで導入されました。 | Javaバージョン1.2で導入されました |
IteratorとSplitteratorsは使用されません。 | forEachの助けを借りて、イテレーターとスプリッターを使用して要素を反復し、各アイテムまたは要素に対してアクションを実行できます。 |
無限の数の機能を保存できます。 | カウント可能な数の要素を格納できます。 |
Streamオブジェクトからの要素の消費と反復は、1回だけ実行できます。 | Collectionオブジェクトからの要素の消費と反復は、複数回実行できます。 |
データの計算に使用されます。 | データを保存するために使用されます。 |
Q#8) 関数型インターフェースをどのように作成できますか?
回答: Javaは関数型インターフェースを識別できますが、アノテーションを使用して定義できます
@FunctionalInterface
関数型インターフェースを定義すると、抽象メソッドを1つだけ持つことができます。抽象メソッドは1つしかないため、複数の静的メソッドとデフォルトメソッドを記述できます。
以下は、2つの数値の乗算用に記述されたFunctionalInterfaceのプログラミング例です。
@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)); } }
出力:
Q#9)SAMインターフェイスとは何ですか?
回答: Java 8では、抽象メソッドを1つだけ持つことができるFunctionalInterfaceの概念が導入されました。これらのインターフェースは1つの抽象メソッドのみを指定するため、SAMインターフェースと呼ばれることもあります。 SAMは「SingleAbstractMethod」の略です。
Q#10) メソッドリファレンスとは何ですか?
英語で無料アニメを見るためのウェブサイト
回答: Java 8では、メソッド参照と呼ばれる新機能が導入されました。これは、機能インターフェイスの方法を指すために使用されます。メソッドを参照しながら、ラムダ式を置き換えるために使用できます。
例えば: ラムダ式が次のようになっている場合
num -> System.out.println(num)
その場合、対応するメソッドリファレンスは次のようになります。
System.out::println
ここで、「::」はクラス名とメソッド名を区別する演算子です。
Q#11) 次の構文を説明する
String:: Valueof Expression
回答: これは、への静的メソッド参照です。 ValueOf の方法 ストリング クラス。 System.out :: printlnは、Systemクラスのoutオブジェクトのprintlnメソッドへの静的メソッド参照です。
渡された引数の対応する文字列表現を返します。引数には、文字、整数、ブールなどを使用できます。
Q#12)述語とは何ですか?述語と関数の違いを述べますか?
回答: 述語は、事前定義された関数型インターフェースです。 java.util.function.Predicateパッケージの下にあります。以下に示す形式の単一の引数のみを受け入れます。
述語
述語 | 関数 |
---|---|
戻り値の型はブール値です。 | Objectとしての戻り値の型があります。 |
それはの形で書かれています 述語 これは単一の引数を受け入れます。 | それはの形で書かれています 関数 これも単一の引数を受け入れます。 |
これは、ラムダ式を評価するために使用される関数型インターフェースです。これは、メソッド参照のターゲットとして使用できます。 | また、ラムダ式を評価するために使用される関数型インターフェースでもあります。関数では、Tは入力タイプを表し、Rは結果タイプを表します。これは、ラムダ式およびメソッドリファレンスのターゲットとしても使用できます。 |
Q#13) 次のコードに何か問題がありますか?コンパイルするのでしょうか、それとも特定のエラーが発生するのでしょうか?
@FunctionalInterface public interface Test { public C apply(A a, B b); default void printString() { System.out.println('softwaretestinghelp'); } }
回答: はい。コードは、単一の抽象メソッドのみを定義するという機能インターフェイスの仕様に従っているため、コンパイルされます。 2番目のメソッドprintString()は、抽象メソッドとしてカウントされないデフォルトのメソッドです。
Q#14) Stream APIとは何ですか?なぜStreamAPIが必要なのですか?
回答: Stream APIは、Java 8で追加された新機能です。これは、Collectionなどのソースからのオブジェクトを処理するために使用される特別なクラスです。
Stream APIが必要な理由は、
- 処理を簡単にする集約操作をサポートします。
- 関数型プログラミングをサポートします。
- それはより速い処理をします。したがって、パフォーマンスが向上する傾向があります。
- 並列操作が可能です。
Q#15) 制限とスキップの違いは何ですか?
回答: limit()メソッドは、指定されたサイズのストリームを返すために使用されます。 例えば、 limit(5)について言及した場合、出力要素の数は5になります。
次の例を考えてみましょう。 ここでの出力は、制限が「6」に設定されているため、6つの要素を返します。
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)); } }
出力:
一方、skip()メソッドは、要素をスキップするために使用されます。
次の例を考えてみましょう。 出力では、要素は6、7、8です。これは、6番目のインデックス(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)); } }
出力:
Q#16) Java 8 Date and Time APIを使用して、現在の日付と時刻をどのように取得しますか?
回答: 以下のプログラムは、Java 8で導入された新しいAPIを使用して作成されています。LocalDate、LocalTime、およびLocalDateTime APIを使用して、現在の日付と時刻を取得しました。
1番目と2番目のprintステートメントでは、タイムゾーンをデフォルトとして設定して、システムクロックから現在の日付と時刻を取得しました。 3番目のprintステートメントでは、日付と時刻の両方を出力するLocalDateTimeAPIを使用しました。
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 } }
出力:
Q#17) Java 8のlimit()メソッドの目的は何ですか?
回答: Stream.limit()メソッドは、要素の制限を指定します。 limit(X)で指定したサイズは、「X」のサイズのストリームを返します。 java.util.stream.Streamのメソッドです。
構文:
limit(X)
ここで、「X」は要素のサイズです。
Q#18)Java 8でforEachを使用して5つの乱数を出力するプログラムを作成しますか?
回答: 以下のプログラムは、Java 8のforEachを使用して5つの乱数を生成します。生成する乱数の数に応じて、limit変数を任意の数に設定できます。
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 */ } }
出力:
Q#19) Java 8でforEachを使用して、5つの乱数をソートされた順序で出力するプログラムを作成しますか?
回答: 以下のプログラムは、Java 8のforEachを使用して5つの乱数を生成します。生成する乱数の数に応じて、limit変数を任意の数に設定できます。ここで追加する必要があるのは、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 */ } }
出力:
Q#20) ストリームの中間操作と端末操作の違いは何ですか?
回答: すべてのストリーム操作は、ターミナルまたは中間のいずれかです。中間操作は、ストリームを返す操作であり、そのストリームで他の操作を実行できます。中間操作は呼び出しサイトでストリームを処理しないため、レイジーと呼ばれます。
これらのタイプの操作(中間操作)は、ターミナル操作が実行されるとデータを処理します。 例 中間操作のはマップとフィルターです。
ターミナルオペレーションはストリーム処理を開始します。この呼び出し中、ストリームはすべての中間操作を実行します。 例 ターミナル操作のは、sum、Collect、およびforEachです。
このプログラムでは、まずターミナル操作なしで中間操作を実行しようとしています。ご覧のとおり、ターミナル操作をサポートしていないため、コードの最初のブロックは実行されません。
ターミナル操作sum()のため、2番目のブロックは正常に実行されました。
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(); } }
出力:
Q#21) リストに存在するすべての数値の合計を取得するJava8プログラムを作成しますか?
回答: このプログラムでは、ArrayListを使用して要素を格納しました。次に、sum()メソッドを使用して、ArrayListに存在するすべての要素の合計を計算しました。次に、Streamに変換され、mapToInt()メソッドと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 } }
出力:
Q#22)Java 8プログラムを作成して、数値のリストを2乗し、100より大きい数値を除外して、残りの数値の平均を求めますか?
回答: このプログラムでは、整数の配列を取得してリストに格納しました。次に、mapToInt()を使用して、要素を2乗し、100より大きい数を除外しました。最後に、残りの数(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()); } }
出力:
Q#23) StreamのfindFirst()とfindAny()の違いは何ですか?
SOAPと安らかなWebサービスの面接の質問
回答: 名前が示すように、findFirst()メソッドはストリームから最初の要素を検索するために使用されますが、findAny()メソッドはストリームから任意の要素を検索するために使用されます。
findFirst()は本質的にpredestinarianismですが、findAny()は非決定論的です。プログラミングにおいて、決定論的とは、出力がシステムの入力または初期状態に基づいていることを意味します。
Q#24) IteratorとSplitteratorの違いは何ですか?
回答: 以下は、IteratorとSplitteratorの違いです。
イテレータ | スプリッター |
---|---|
Javaバージョン1.2で導入されました | Java SE8で導入されました |
コレクションAPIに使用されます。 | StreamAPIに使用されます。 |
反復メソッドのいくつかは、要素を反復するために使用されるnext()とhasNext()です。 | SpliteratorメソッドはtryAdvance()です。 |
コレクションオブジェクトでiterator()メソッドを呼び出す必要があります。 | Stream Objectでsplitterator()メソッドを呼び出す必要があります。 |
順番にのみ繰り返します。 | 並列および順次の順序で繰り返します。 |
Q#25) コンシューマー機能インターフェースとは何ですか?
回答: コンシューマー関数型インターフェースも単一引数インターフェースです(述語や関数など)。 java.util.function.Consumerの下にあります。これは値を返しません。
以下のプログラムでは、acceptメソッドを使用して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 */ } }
出力:
Q#26) サプライヤー機能インターフェースとは何ですか?
回答: サプライヤ機能インターフェイスは、入力パラメータを受け入れません。 java.util.function.Supplierの下にあります。これは、getメソッドを使用して値を返します。
以下のプログラムでは、getメソッドを使用して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. */ } }
出力:
Q#27) Java 8のNashornとは何ですか?
回答: Java 8のNashornは、JavaScriptコードを実行および評価するためのJavaベースのエンジンです。
Q#28) ストリームの最小数と最大数を見つけるJava8プログラムを作成しますか?
回答: このプログラムでは、min()メソッドとmax()メソッドを使用して、ストリームの最大数と最小数を取得しました。まず、整数を持つStreamを初期化し、Comparator.comparing()メソッドを使用して、Streamの要素を比較しました。
このメソッドをmax()およびmin()に組み込むと、最大値と最小値が得られます。文字列を比較するときにも機能します。
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); } }
出力:
Q#29) MapとflatMapStreamの操作の違いは何ですか?
回答: Map Stream操作では、入力値ごとに1つの出力値が提供されますが、flatMap Stream操作では、入力値ごとに0個以上の出力値が提供されます。
マップの例- マップストリーム操作は、通常、以下のようなストリームの簡単な操作に使用されます。
このプログラムでは、「名前」の文字をストリームに格納した後、マップ操作を使用して大文字に変更し、forEachターミナル操作を使用して各要素を印刷しました。
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 } }
出力:
flatMapの例- flatMapストリーム操作は、より複雑なストリーム操作に使用されます。
ここでは、「String型のリストのリスト」に対してflatMap操作を実行しました。入力名をリストとして指定し、それらをストリームに保存して、「S」で始まる名前を除外しました。
最後に、forEachターミナル操作を使用して、各要素を印刷しました。
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 */ } }
出力:
Q#30) Java 8のMetaSpaceとは何ですか?
回答: Java 8では、クラスを格納するための新機能が導入されました。 Java8に格納されているすべてのクラスがMetaSpaceと呼ばれる領域。 MetaSpaceはPermGenに取って代わりました。
Java 7まで、PermGenはクラスを格納するためにJava仮想マシンによって使用されていました。 MetaSpaceは動的に拡張でき、サイズ制限がないため動的であるため、Java8はPermGenをMetaSpaceに置き換えました。
Q#31) Java 8の内部反復と外部反復の違いは何ですか?
回答: 内部反復と外部反復の違いを以下に示します。
内部反復 | 外部反復 |
---|---|
Java 8(JDK-8)で導入されました。 | これは、以前のバージョンのJava(JDK-7、JDK-6など)で導入および実践されていました。 |
コレクションなどの集約されたオブジェクトに対して内部的に反復します。 | 集約されたオブジェクトに対して外部で反復します。 |
関数型プログラミングスタイルをサポートします。 | オブジェクト指向プログラミングスタイルをサポートします。 |
内部イテレータはパッシブです。 | 外部イテレータがアクティブです。 |
エラーが少なく、コーディングも少なくて済みます。 | コーディングはほとんど必要なく、エラーが発生しやすくなります。 |
Q#32) JJSとは何ですか?
二重リンクリストc ++チュートリアル
回答: JJSは、コンソールでJavaScriptコードを実行するために使用されるコマンドラインツールです。 Java 8では、JJSはJavaScriptエンジンである新しい実行可能ファイルです。
Q#33)Java 8のChronoUnitsとは何ですか?
回答: ChronoUnitsは、月や日などを表すために古いAPIで使用されていた整数値を置き換えるために導入された列挙型です。
Q#34) Java 8のStringJoinerクラスについて説明しますか? StringJoinerクラスを使用して複数の文字列を結合するにはどうすればよいですか?
回答: Java 8では、StringJoinerと呼ばれる新しいクラスがパッケージjava.utilに導入されました。このクラスを介して、接頭辞と接尾辞を提供するとともに、区切り文字で区切られた複数の文字列を結合できます。
以下のプログラムでは、StringJoinerクラスを使用して複数の文字列を結合する方法について学習します。ここでは、2つの異なる文字列間の区切り文字として「、」があります。次に、add()メソッドを使用して5つの異なる文字列を追加し、それらを結合しました。最後に、文字列ジョイナーを印刷しました。
次の質問#35では、文字列に接頭辞と接尾辞を追加する方法について学習します。
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); } }
出力:
Q#35)文字列にプレフィックスとサフィックスを追加するJava 8プログラムを作成しますか?
回答: このプログラムでは、2つの異なる文字列間の区切り文字として「、」があります。また、接頭辞と接尾辞として「(」と「)」の括弧を付けました。次に、add()メソッドを使用して5つの異なる文字列を追加することにより、それらを結合します。最後に、文字列ジョイナーを印刷しました。
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); } }
出力:
Q#36) forEachメソッドを使用してストリームを反復するJava8プログラムを作成しますか?
回答: このプログラムでは、「number = 2」から開始し、各反復後に「1」ずつ増分されるcount変数が続くStreamを反復しています。
次に、数値2で割ったときに余りがゼロでない数値をフィルタリングします。また、制限を?として設定しました。 5は、5回だけ繰り返されることを意味します。最後に、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); } }
出力:
Q#37) 配列をソートし、ソートされた配列をストリームに変換するJava 8プログラムを作成しますか?
回答: このプログラムでは、並列ソートを使用して整数の配列をソートしました。次に、並べ替えられた配列をStreamに変換し、forEachを使用して、Streamの各要素を出力しました。
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 */ } }
出力:
Q#38) 長さが5より大きいリスト内の文字列の数を見つけるJava8プログラムを作成しますか?
回答: このプログラムでは、add()メソッドを使用して4つの文字列をリストに追加し、StreamおよびLambda式を使用して、長さが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'); } }
出力:
Q#39) 2つのストリームを連結するJava8プログラムを作成しますか?
回答: このプログラムでは、すでに作成された2つのリストから2つのストリームを作成し、2つのリストが引数として渡されるconcat()メソッドを使用してそれらを連結しました。最後に、連結されたストリームの要素を印刷しました。
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 } }
出力:
Q#40) リストから重複する要素を削除するJava8プログラムを作成しますか?
回答: このプログラムでは、要素を配列に格納し、リストに変換しました。その後、ストリームを使用し、「Collectors.toSet()」メソッドを使用して「Set」に収集しました。
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)); } }
出力:
結論
この記事では、Java8で導入された新機能を理解しました。Java8のすべての主要な面接の質問とその回答について詳しく説明しました。
このチュートリアルを読むと、日時操作用の新しいAPI、Java 8の新機能、新しいストリーミングAPI、および概念に従った適切なプログラミング例についての知識を習得している必要があります。これらの新しい概念または機能は、より困難なJavaポジションを求めている場合の面接プロセスの一部です。
ではごきげんよう!!
=> ここですべてのJavaチュートリアルを確認してください。