>  기사  >  Java  >  Java에서 list.forEach()와 list.stream().forEach()의 차이점은 무엇입니까?

Java에서 list.forEach()와 list.stream().forEach()의 차이점은 무엇입니까?

WBOY
WBOY앞으로
2023-04-24 22:07:061484검색

우선 해당 기능은 배열의 각 요소를 순회하고 입력 매개변수의 accept() 메서드를 실행하는 것이지만 일부 특정 경우에는 실행 결과가 다릅니다.

대부분의 경우 둘 다 동일한 결과를 생성하지만 약간의 미묘한 차이가 있습니다.

개요

먼저 반복 가능한 목록을 만듭니다.

List<String> list = Arrays.asList("A","B","C","D");

가장 간단한 방법은 향상된 for 루프를 사용하는 것입니다.

for(String s : list"){
    //something
}

기능적 Java를 사용하려면 forEach()를 사용할 수도 있습니다. 컬렉션에서 직접 이 작업을 수행할 수 있습니다:

Consumer<String> consumer = s -> {System.out::println};
list.forEach(consumer);

또는 컬렉션 스트림에서 forEach()를 호출할 수 있습니다.

list.stream().forEach(consumer);

두 버전 모두 목록을 반복하고 모든 요소를 ​​인쇄합니다.

ABCD ABCD

in In 이 간단한 예에서는 우리가 사용하는 forEach()에는 차이가 없습니다.

Difference

list.forEach()는 향상된 for 루프를 사용합니다

default void forEach(Consumer<? super T> action) {
      Objects.requireNonNull(action);
      for (T t : this) {
          action.accept(t);
      }
  }

list.stream().forEach(): 먼저 컬렉션을 스트림으로 변환한 다음 컬렉션의 스트림을 반복합니다

동안 반복할 때 시간을 삭제하면 forEach는 빠르게 실패할 수 있지만 stream().forEach()는 예외를 발생시키기 전에 배열이 탐색될 때까지만 기다립니다

public class DeleteDifference {
   public static void main(String[] args) {
       List<String> list = Arrays.asList("A", "B", "C", "D");

       try {
           list.forEach(item -> {
               System.out.println(item);
               list.remove(0);
           });
       } catch (Exception e) {
           e.printStackTrace();
       }

       list.stream().forEach(item -> {
           System.out.println(item);
           list.remove(0); 
       });
   }
}

위 내용은 Java에서 list.forEach()와 list.stream().forEach()의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제