아래는 List에서 특정 요소를 찾는 여러가지 방법이다.
기본 데이터 준비
일단 User를 가지고 있는 List를 만들어보자
userId와 name을 가지고 있는 User 클래스를 정의하고
@AllArgsConstructor
@Getter
@EqualsAndHashCode
public class User {
private int userId;
private String name;
}
ArrayList를 생성하자.
List<User> users = Arrays.asList(
new User(1, "hong"),
new User(2, "kim"),
new User(3, "lee")
);
1. contains를 이용한 방법
@Test
public void containsTest() {
User user = new User(1, "hong");
Assert.assertTrue(users.contains(user)); // true
}
2. indexOf를 이용한 방법
@Test
public void indexOfTest() {
User user = new User(1, "hong");
Assert.assertTrue(users.indexOf(user) > -1);
}
3. 기본 loop를 이용한 방법
@Test
public void basicLoopTest() {
User findUser = new User(1, "hong");
Assert.assertTrue(findUserForLoop(users, findUser) != null);
}
private User findUserForLoop(List<User> users, User findUser) {
for (User user: users) {
if (user.getUserId() == findUser.getUserId() && user.getName().equals(findUser.getName())) {
return user;
}
}
return null;
}
4. iterator를 이용한 방법
@Test
public void iteratorLoopTest() {
User findUser = new User(1, "hong");
Assert.assertTrue(findUserIterator(users, findUser) != null);
}
private User findUserIterator(List<User> users, User findUser) {
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (user.getUserId() == findUser.getUserId() && user.getName().equals(findUser.getName())) {
return user;
}
}
return null;
}
5. Java Stream API를 이용한 방법
@Test
public void streamTest() {
User findUser = new User(1, "hong");
User result = users.stream()
.filter(user -> user.getUserId() == findUser.getUserId() && user.getName().equals(findUser.getName()))
.findAny()
.orElse(null);
Assert.assertTrue(findUser.equals(result));
}
참고: https://www.baeldung.com/find-list-element-java
반응형