1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java Silver対策】主要API(List, LocalDate, ラムダ式)厳選10問

1
Posted at

Java Silver試験で頻出の「主要API」に関する問題を10問収録しました。List/ArrayListの操作、Collections.sort()、List.of()、LocalDate/LocalTime/LocalDateTime、ラムダ式、Predicate/Consumer/Function/Supplierなど、試験で問われやすいポイントを網羅しています。


問題1 ⭐(基本)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add(1, "X");
        System.out.println(list);
    }
}
  • A. [A, B, C, X]
  • B. [A, X, B, C]
  • C. [X, A, B, C]
  • D. コンパイルエラー
解答と解説

正解: B

add(int index, E element)はインデックス位置に要素を挿入します。既存の要素は右にシフトされます。

初期状態: [A, B, C]
add(1, "X") → インデックス1に"X"を挿入 → [A, X, B, C]

add(E element)(引数1つ)は末尾に追加、add(int index, E element)(引数2つ)は指定位置に挿入という違いに注意してください。


問題2 ⭐⭐(応用)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = List.of("A", "B", "C");
        list.add("D");
        System.out.println(list);
    }
}
  • A. [A, B, C, D]
  • B. [A, B, C]
  • C. コンパイルエラー
  • D. 実行時エラー(UnsupportedOperationException
解答と解説

正解: D

List.of()不変(immutable)リストを返します。不変リストに対してadd()remove()set()などの変更操作を行うと、UnsupportedOperationExceptionがスローされます。

同様に、List.copyOf()も不変リストを返します。

変更可能なリストが必要な場合は:

List<String> mutable = new ArrayList<>(List.of("A", "B", "C"));
mutable.add("D"); // OK

List.of()で生成したリストはnull要素を含めることもできません(NullPointerExceptionがスローされます)。


問題3 ⭐⭐(応用)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Banana");
        list.add("Apple");
        list.add("Cherry");
        Collections.sort(list);
        System.out.println(list);
        System.out.println(list.contains("apple"));
        System.out.println(list.indexOf("Banana"));
    }
}
  • A. [Apple, Banana, Cherry]true1
  • B. [Apple, Banana, Cherry]false1
  • C. [Banana, Apple, Cherry]false0
  • D. [Apple, Banana, Cherry]false0
解答と解説

正解: B

Collections.sort()は自然順序(Stringの場合はUnicode辞書順)でソートします。結果は[Apple, Banana, Cherry]です。

contains("apple")大文字小文字を区別するため、"apple"(小文字)は見つからずfalseを返します。

indexOf("Banana")はソート後のリスト[Apple, Banana, Cherry]でのインデックスを返します。"Banana"はインデックス1にあります。


問題4 ⭐⭐(応用)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        list.remove(1);
        System.out.println(list);
        System.out.println(list.size());
    }
}
  • A. [10, 30]2
  • B. [20, 30]2
  • C. [10, 20, 30]2
  • D. 実行時エラー
解答と解説

正解: A

list.remove(1)はインデックス1の要素を削除します。List<Integer>に対してremove(int index)remove(Object o)の両方が候補になりますが、intリテラル1オートボクシングされずにremove(int index)が優先されます。

初期状態: [10, 20, 30]
remove(1) → インデックス1の要素(20)を削除 → [10, 30]

1Integerオブジェクトを削除したい場合は:

list.remove(Integer.valueOf(1)); // remove(Object)が呼ばれる

問題5 ⭐(基本)

次のコードをコンパイル・実行すると、どうなりますか?

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, 1, 31);
        date.plusMonths(1);
        System.out.println(date);
    }
}
  • A. 2025-02-28
  • B. 2025-01-31
  • C. 2025-03-01
  • D. 実行時エラー
解答と解説

正解: B

LocalDate不変(immutable)オブジェクトです。plusMonths(1)は新しいLocalDateオブジェクトを返しますが、元のdateは変更されません。戻り値を使わなければ元のオブジェクトのまま出力されます。

正しい使い方:

LocalDate newDate = date.plusMonths(1);
System.out.println(newDate); // 2025-02-28

LocalDateLocalTimeLocalDateTimeStringはすべて不変オブジェクトです。変更メソッドは常に新しいオブジェクトを返すことを覚えておいてください。


問題6 ⭐⭐(応用)

次のコードをコンパイル・実行すると、どうなりますか?

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, 6, 15);
        LocalTime time = LocalTime.of(14, 30, 45);
        LocalDateTime dt = LocalDateTime.of(date, time);

        System.out.println(dt.getYear());
        System.out.println(dt.getMonthValue());
        System.out.println(dt.getHour());
    }
}
  • A. 2025614
  • B. 2025JUNE14
  • C. 202562
  • D. コンパイルエラー
解答と解説

正解: A

LocalDateTime.of(LocalDate, LocalTime)で日付と時刻を組み合わせてLocalDateTimeを生成できます。

  • getYear()2025intを返す)
  • getMonthValue()6intを返す、1〜12)
  • getHour()14intを返す、0〜23)

getMonth()Month列挙型(JUNEなど)を返す点に注意してください。getMonthValue()int(1〜12)を返します。


問題7 ⭐⭐(応用)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(List.of("Java", "Python", "JavaScript", "C"));
        Predicate<String> longName = s -> s.length() > 4;
        list.removeIf(longName);
        System.out.println(list);
    }
}
  • A. [Java, Python, JavaScript]
  • B. [Java, C]
  • C. [Python, JavaScript]
  • D. コンパイルエラー
解答と解説

正解: B

Predicate<T>Tを受け取りbooleanを返す関数型インターフェースです。test(T t)メソッドを持ちます。

removeIf(Predicate)は条件に一致する要素を削除します。s.length() > 4trueになる要素:

  • "Java" → 長さ4 → false(残る)
  • "Python" → 長さ6 → true(削除)
  • "JavaScript" → 長さ10 → true(削除)
  • "C" → 長さ1 → false(残る)

結果: [Java, C]


問題8 ⭐⭐⭐(チャレンジ)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<String> supplier = () -> "Hello";
        Function<String, Integer> function = s -> s.length();
        Consumer<Integer> consumer = n -> System.out.println("Length: " + n);

        String value = supplier.get();
        Integer length = function.apply(value);
        consumer.accept(length);
    }
}
  • A. Length: 5
  • B. Hello
  • C. 5
  • D. コンパイルエラー
解答と解説

正解: A

4つの主要な関数型インターフェース:

インターフェース メソッド 引数 戻り値
Supplier<T> get() なし T
Consumer<T> accept(T) T なし(void
Function<T,R> apply(T) T R
Predicate<T> test(T) T boolean

実行順序:

  1. supplier.get()"Hello"を返す
  2. function.apply("Hello")"Hello".length()5を返す
  3. consumer.accept(5)"Length: 5"を出力

問題9 ⭐⭐⭐(チャレンジ)

次のコードをコンパイル・実行すると、どうなりますか?

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.parse("2025-13-01");
        System.out.println(date);
    }
}
  • A. 2025-13-01
  • B. 2026-01-01
  • C. コンパイルエラー
  • D. 実行時エラー(DateTimeParseException
解答と解説

正解: D

LocalDate.parse()はデフォルトでISO_LOCAL_DATE形式(yyyy-MM-dd)を期待します。月の値13は不正な値(1〜12の範囲外)なので、java.time.format.DateTimeParseExceptionがスローされます。

LocalDate.of(2025, 13, 1)も同様にDateTimeExceptionをスローします。Date and Time APIは厳密なバリデーションを行います(旧java.util.Dateとは異なり、自動的に繰り越しません)。

正しい使い方:

LocalDate date = LocalDate.parse("2025-12-01"); // OK
LocalDate date2 = LocalDate.of(2025, 12, 1);     // OK

問題10 ⭐⭐⭐(チャレンジ)

次のコードをコンパイル・実行すると、どうなりますか?

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>(List.of("Alice", "Bob", "Charlie", "David"));

        Predicate<String> startsWithC = s -> s.startsWith("C");
        Predicate<String> longName = s -> s.length() > 3;
        Predicate<String> combined = startsWithC.or(longName);

        Function<String, String> toUpper = String::toUpperCase;

        names.removeIf(combined.negate());
        names.replaceAll(toUpper::apply);
        System.out.println(names);
    }
}
  • A. [ALICE, CHARLIE, DAVID]
  • B. [BOB]
  • C. [ALICE, BOB, CHARLIE, DAVID]
  • D. コンパイルエラー
解答と解説

正解: A

ステップごとに解説します。

combined = startsWithC.or(longName) → "Cで始まる" または "長さが3超"

各要素の判定:

  • "Alice" → Cで始まらない、長さ5 > 3 → true
  • "Bob" → Cで始まらない、長さ3 > 3ではない → false
  • "Charlie" → Cで始まる → true
  • "David" → Cで始まらない、長さ5 > 3 → true

combined.negate() → 上記の結果を反転:

  • "Alice"false(削除しない)
  • "Bob"true(削除する)
  • "Charlie"false(削除しない)
  • "David"false(削除しない)

removeIf(combined.negate())"Bob"が削除される → [Alice, Charlie, David]

replaceAll(toUpper::apply) → 各要素を大文字に変換 → [ALICE, CHARLIE, DAVID]

Predicateの合成メソッド:

  • and() → 両方truetrue
  • or() → いずれかtruetrue
  • negate() → 結果を反転

参考


@kotaro_ai_lab
AI活用や開発効率化について発信しています。フォローお気軽にどうぞ!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?