Java Collections API の備忘録

Javaのコレクション周りの備忘録

目次

Collections API

  • Java8から使える

List

動的配列

// Listの初期化
List<Integer> list = new ArrayList<>(); // Java 7以降

// 値の追加
list.add(1);
list.add(2);

// indexに対応する要素の取得
list.get(0);

list.remove(1); // 1番目の要素を削除

Listの初期化パターン

// 固定リストとして初期化
List<String> list = Arrays.asList("Apple", "Banana", "Orange");

// 可変リストとして初期化
List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));

// staticイニシャライザを用いる
List<String> list = new ArrayList<>() {
    {
        add("Apple");
        add("Banana");
    }
}

Map

Map<String, Integer> map = new HashMap<>();
map.put("banana", 100);
map.put("apple", 200);
map.put("orange", 300);


Set<String> set = new HashSet<>();
set.add("fruits");
set.add("rice");
set.add("meet");
set.add("vegetable");

Stream API

特徴

map

List<Integer> list = Arrays.asList(1,2,3,4,5);

List<Integer> expon = list.map(i ->  Math.exp(i)).collect(Collectors.toList());

filter

List<Integer> list = Arrays.asList(1,2,3,4,5);

List<Integer> oddNumbers = list.stream().filter(i -> i % 2 != 0).collect(Collectors.toList());

グループ化して処理する

class Food {
    private String name;
    private String category;
    private Integer price;
    
    public Food(String name, String category, Integer price) {
        this.name = name;
        this.category = category;
        this.price = price;
    }
   
    public String getCategory() {
        return this.category;
    }
    
    public Integer getPrice() {
        return this.price;
    }
}

List<Food> foods = new ArrayList<>();
foods.add(new Food("りんご", "フルーツ", 100));
foods.add(new Food("ばなな", "フルーツ", 50));
foods.add(new Food("白米", "炭水化物", 50));
foods.add(new Food("餅", "炭水化物",  200));
foods.add(new Food("鱈", "魚", 300));
foods.add(new Food("鮭", "魚", 300));
foods.add(new Food("牛肉", "肉", 400));
foods.add(new Food("豚肉", "肉", 300));

// カテゴリごとに集計する
Map<String, Integer> aggregated = foods.stream().collect(
            Collectors.groupingBy(
                Food::getCategory, 
                Collectors.summingInt(Food::getPrice)
            )
        );
aggregated.forEach((category, subtotal) -> {
    System.out.println(category + " => " + subtotal); // フルーツ => 150...
});