15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java: Map#computeIfAbsentの使いどころ

Last updated at Posted at 2021-07-05

Java 8で追加されたMap#computeIfAbsentの使用例について紹介します。

こんなコードはありませんか?

たとえば、Mapに要素を追加するaddStudentメソッドがあります。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SchoolEntity {

	private final Map<String, List<String>> studentMap = new HashMap<>();

	/**
	 * 学級に生徒を追加します
	 * @param classRoom 学級名
	 * @param studentName 生徒名
	 */
	public void addStudent(String classRoom, String studentName) {
		List<String> studentList;
		if (studentMap.containsKey(classRoom)) {
			studentList = studentMap.get(classRoom);
		} else {
			studentList = new ArrayList<>();
		}
		studentList.add(studentName);
		studentMap.put(classRoom, studentList);
	}
}

上記のaddStudentメソッドのコードは、下記の流れで実装されています。

  1. Mapに指定のKey(classRoom)が存在するかを確認する
    1. 存在する場合は値要素(List)を取得する
    2. 存在しない場合は新規にArrayListインスタンスを作成し、取得する
  2. 取得したList要素に対して、引数で渡されたオブジェクト(studentName)を追加する
  3. 2番のListをMapにputする

やっていることは単純なのですが、ちょっと長いコードですね。

Map#computeIfAbsentを使うと

上記のaddStudentメソッドの実装を、たった1行で書くことができます。

public void addStudent(String classRoom, String studentName) {
	studentMap.computeIfAbsent(classRoom, (key) -> new ArrayList<>()).add(studentName);
}

とても便利ですね。

SonarQubeでの検知

静的解析ツールであるSonarQubeでは、上記のようにMap#computeIfAbsentが利用できる可能性のあるコードを自動的に検知することができます。

参考URL

15
8
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
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?