LoginSignup
2
0

More than 3 years have passed since last update.

Javaで配列・Listの宣言方法からstreamでの操作までまとめ

Last updated at Posted at 2020-12-09

こちらの記事はユアマイスターアドベントカレンダー2020の9日目の記事です

こんにちは!!!!

今回のテーマ

Javaで配列・Listの宣言方法からstreamAPIを使ってListの操作を行うまでの方法をまとめます。

なぜこのテーマにしたのか

  • Javaを書いている時に個人的によく使う&使いやすいものがStreamAPIなので
  • 最近Java書いてないから忘れてきたので勉強し直すことが目的

配列の宣言・初期化・データの取得方法

方法1

String prefectures[] = new String[2]; // 変数の宣言&要素数の設定をする
prefectures[0] = "東京"; // index = 0番目に東京がはいる
prefectures[1] = "神奈川"; // index = 1番目に神奈川がはいる
prefectures[2] = "沖縄"; // ArrayIndexOutOfBoundsException
String tokyo = prefectures[0]; // index = 0番目を取得
System.out.println(tokyo); // 東京

// 方法2

String prefectures[] = {"東京", "神奈川"}; // 初期化
prefectures[2] = "沖縄"; // ArrayIndexOutOfBoundsException
String tokyo = prefectures[0]; // index = 0番目を取得
System.out.println(tokyo); // 東京

配列は宣言時に要素数が決まるので増やすも減らすもできません。
存在しない要素にアクセスした場合は ArrayIndexOutOfBoundsExceptionが起きます。

Listの宣言・初期化・データの取得方法


// 宣言
ArrayList<String> members = new ArrayList<String>();

// データの追加→取得方法その1
members.add(0, "田中"); // 第一引数→index, 第二引数→入れたいデータ
String tanaka = members.get(0); // index = 0番目を取得
System.out.println(tanaka); // 田中

// データの追加→取得方法その2
members.add("岡田"); // 勝手にindex=1で追加される
String okada = members.get(1); // index = 1番目を取得
System.out.println(okada); // 岡田

members.add(5,"山田"); // IndexOutOfBoundsException

Listはデータを増やすも減らすも自由ですが、index数を順番通りに入れないと例外が起きます。

ArrayList<String> members = new ArrayList<>();

ちなみに宣言時の二個目のダイヤモンド演算子は省略可能です↑

StreamAPIを使ったListの処理

filter

ユースケース:特定のデータのみListからFilterかけたい時

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumber = numbers.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
// 偶数のみListで取得し直す
System.out.println(evenNumber); // [2, 4, 6]

map

ユースケース:要素全てに同じ操作を行いたいとき

public void numbersTwiceExecute(){
    List<Integer> numbers = Arrays.asList(1, 2, 3);
    List<Integer> twiceNumbers = numbers.stream().map(this::twiceNumber).collect(Collectors.toList());
// Listの中身全てを2倍にした
    System.out.println(twiceNumbers); // [2, 4, 6]
}

public Integer twiceNumber(Integer number){
    return number * 2;
}

sorted

ユースケース:並び替えしたい時

事前にこちらのクラスを実装してください↓

public class User {
    int age;
    String name;

    public User(int age, String name){
        this.age = age;
        this.fullname = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setFullname(String name) {
        this.name = name;
    }
}
public void sortedByAge(){
    User user1 = new User(20,"山田花子");
    User user2 = new User(10,"小野ヨーコ");
    User user3 = new User(5,"田中愛");
    List<User> users = Arrays.asList(user1, user2, user3);
    users.forEach(user-> System.out.print(user.getAge() + "才 "));
// 20才 10才 5才 

    List<User> sortedByAgeUsers = users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
    sortedByAgeUsers.forEach(user -> System.out.print(user.getAge() + "才 "));
// 5才 10才 20才
// 年齢順にソートされました
}

anyMatch

ユースケース:リストに特定のデータを含んでいるか確認したい時

    List<Integer> numbers = Arrays.asList(1, 2, 3);
    boolean existOddNumber = numbers.stream().anyMatch(num -> num % 2 == 1);
    // Listに奇数が含まれているかの確認
    System.out.println(existOddNumber); // true

感想

StreamのおかげでListの処理はだいぶ楽&可読性が上がると思いました。
これからも積極的に使っていきたいです。

2
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
2
0