java / / 2023. 1. 26. 20:59

List에서 특정 요소를 찾는 방법

아래는 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



반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유