โ List๋ฅผ map์ผ๋ก ๋ณํํ๋ ์ด์
db๋ API์์ ๋ฐ์ดํฐ ๋ฐ์์์ ๊ฒ์ํ ๋ ์๋๋ ํจ์จ์ฑ ์ธก๋ฉด์์ map์ด ๋น ๋ฆ
์ฆ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋, ๋น ๋ฅธ ๊ฒ์์ ์ํด์ ํ์ํจ.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ map์ ํด์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ ํค,๊ฐ ์ ํ์์ ๊ฐ์ง๊ธฐ ๋๋ฌธ.
JSON์ด๋ ๋น์ทํ ํ์์ด์ง๋ง ์๋ฐ์ map์ ํค๊ฐ ํ์ ์ ์ ๋ค๋ฆญ์ผ๋ก ์ง์ ํด ์ฃผ์ด์ผ ํ๊ณ
Map<String, Integer>์ฒ๋ผ ๋ช ํํ ํ์ ์ ์ง์ ํด ์ฃผ์ด์ผ ํจ.
[JSON]
{
"name": "Alice",
"age": 30,
"isEmployee": true
}
[JAVA map]
Map<String, Object> person = new HashMap<>();
person.put("name", "Alice");
person.put("age", 30);
person.put("isEmployee", true);
์๋ฅผ ๋ค์ด, ์ง์ ๋ฆฌ์คํธ๊ฐ List<Employee> ํํ๋ก ์๋ค๊ณ ํ ๋, Employee ๊ฐ์ฒด์ employeeId๊ฐ ์๋ค๋ฉด, employeeID๋ฅผ ํค๊ฐ์ผ๋ก Map<Integer, Employee>๋ก ๋ณํํ ์ ์์.
์ด๋ ๊ฒ ํ๋ฉด ์ง์ ID๋ฅผ ํตํด ํด๋น ์ง์ ๊ฐ์ฒด์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ด ์กฐํ ํจ์จ์ด ํฅ์๋จ.
๋ง์ฝ List์์ ํน์ ์ง์ ID๋ก ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ชจ๋ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ํด์ผ ํ๋ ๋ฐ๋ฉด,
Map์์๋ ํด์ ๊ธฐ๋ฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก O(1) ์๊ฐ ๋ณต์ก๋๋ก ์ํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์.
โ ์์ฝ
1. ๊ฒ์ ํจ์จ์ด ์ข๋ค
ํ์ ๋ฆฌ์คํธ List<Student>์ ๊ณผ๋ชฉ ๋ฆฌ์คํธ List<Subject>๋ฅผ ํ์ ๊ฐ์ฒด์ ๊ณผ๋ชฉ ๊ฐ์ฒด๊ฐ ๊ฐ๊ฐ ํ์ ID ๋๋ ๊ณผ๋ชฉ ID๋ก ์ฐธ์กฐ ๊ฐ๋ฅํด์ผ ํ๋ค๋ฉด, Map<Integer, Student> ๋๋ Map<Integer, Subject>ํํ๋ก ๋ณํํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์. ์ด๋ ๊ฒ ํ๋ฉด ID ๊ธฐ๋ฐ์ผ๋ก ํ์๊ณผ ๊ณผ๋ชฉ์ ์ฝ๊ฒ ์กฐํ ๊ฐ๋ฅ.
2. ์ค๋ณตํค ๊ฐ ๊ด๋ฆฌ
db์ ๋์ผํ employeeId๋ฅผ ๊ฐ์ง ์ง์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์ผ๋ toMap์ ์ฐ๋ฉด Collectors.toMap์ด ์ด๋ค ๊ฐ์ ์ ์งํ ์ง ์ ์ ๊ฐ๋ฅ.
3. Stream API
์๋ฐ8๋ถํฐ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก Stream API๋ฅผ ์ฐ๋ฉด for๋ฌธ์ ๋๋ฆฌ์ง ์๊ณ ๋ List์์ Map์ผ๋ก ์ฝ๊ฒ ๋ณํํ ์ ์์ด์ ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ๋์์ง.
โ for๋ฌธ ์จ์ list๋ฅผ map ํ์์ผ๋ก ๋ณํ
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Example {
public static void main(String[] args) {
List<Employee> employees = List.of(
new Employee(1, "Alice", "Engineering"),
new Employee(2, "Bob", "Marketing"),
new Employee(3, "Charlie", "Sales")
);
// List<Employee> -> Map<Integer, Employee> ๋ณํ (Stream ์์ด)
Map<Integer, Employee> employeeMap = new HashMap<>();
for (Employee employee : employees) {
employeeMap.put(employee.getEmployeeId(), employee);
}
// ํน์ ID๋ก ์ง์ ๊ฐ์ฒด์ ์ ๊ทผ
Employee employee = employeeMap.get(1); // employeeId๊ฐ 1์ธ ์ง์
System.out.println(employee);
}
}
class Employee {
private int employeeId;
private String name;
private String department;
public Employee(int employeeId, String name, String department) {
this.employeeId = employeeId;
this.name = name;
this.department = department;
}
public int getEmployeeId() {
return employeeId;
}
@Override
public String toString() {
return "Employee{id=" + employeeId + ", name='" + name + "',
department='" + department + "'}";
}
}
โ ์๋ฐ8 Stream API, list -> map ๋ณํ
- Stream ์์ฑ: employees.stream()์ ํตํด ๋ฆฌ์คํธ์์ ์คํธ๋ฆผ ์์ฑ
- collect() ๋ฉ์๋: Collectors.toMap()์ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ์์๋ฅผ ๋งต์ผ๋ก ์์ง
- ํค์ ๊ฐ ์ค์
- ํค ์ค์ : Employee::getEmployeeId ๋ฉ์๋ ์ฐธ์กฐ, ๊ฐ Employee ๊ฐ์ฒด์ employeeId ํ๋๋ฅผ ๋งต์ ํค๋ก ์ค์
- ๊ฐ ์ค์ : ๋๋ค ํํ์ employee -> employee ์ผ๋ก Employee ๊ฐ์ฒด ์์ฒด๋ฅผ ๊ฐ์ผ๋ก ์ค์
- ID๋ก ๋ฐ์ดํฐ ์กฐํ: ์์ฑ๋ Map<Integer, Employee> ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ํน์ employeeId๋ก ์ง์ ๊ฐ์ฒด๋ฅผ ์กฐํ
- employeeMap.get(1)์ ํธ์ถํ๋ฉด, employeeId๊ฐ 1์ธ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ด
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Example {
public static void main(String[] args) {
List<Employee> employees = List.of(
new Employee(1, "Alice", "Engineering"),
new Employee(2, "Bob", "Marketing"),
new Employee(3, "Charlie", "Sales")
);
// List<Employee> -> Map<Integer, Employee> ๋ณํ
Map<Integer, Employee> employeeMap = employees.stream()
.collect(Collectors.toMap(Employee::getEmployeeId,
employee -> employee));
// ํน์ ID๋ก ์ง์ ๊ฐ์ฒด์ ์ ๊ทผ
Employee employee = employeeMap.get(1); // employeeId๊ฐ 1์ธ ์ง์
System.out.println(employee);
}
}
class Employee {
private int employeeId;
private String name;
private String department;
public Employee(int employeeId, String name, String department) {
this.employeeId = employeeId;
this.name = name;
this.department = department;
}
public int getEmployeeId() {
return employeeId;
}
@Override
public String toString() {
return "Employee{id=" + employeeId + ", name='" +
name + "', department='" + department + "'}";
}
}