JavaRush /Java Blog /Random-KO /사이클 쓰기를 중단하세요! Java 8의 컬렉션 작업을 위한 최고의 10가지 방법

사이클 쓰기를 중단하세요! Java 8의 컬렉션 작업을 위한 최고의 10가지 방법

Random-KO 그룹에 게시되었습니다
JavaRush 학생들에게 컬렉션이 무엇인지, 무엇을 위한 것인지 설명할 필요는 없다고 생각합니다. 그러나 8차 버전 출시 이후에는 이전에 6~7줄의 코드가 필요했던 많은 기본 연산이 최소한으로 단순화되었습니다. 더 이상 고민하지 말고, 시간과 공간을 엄청나게 절약해 줄 최고의 Java8 컬렉션 프레임워크 기술 상위 10가지를 소개합니다! 사이클 쓰기를 중단하세요!  Java 8 - 1의 컬렉션을 사용하는 최고의 10가지 방법안녕하세요 여러분, 친구들! 아시다시피 습관은 제2의 천성입니다. 그리고 글쓰기에 익숙해지면 for (int i = 0; i <......)전혀 다시 배우고 싶지 않습니다. 특히 이 디자인은 매우 간단하고 이해하기 쉽기 때문입니다. 그러나 내부 루프에서는 동일한 기본 작업을 반복하는 경우가 많으며 이러한 반복을 제거하고 싶습니다. Java8이 출시되면서 Oracle은 이를 지원하기로 결정했습니다. 다음은 엄청난 시간과 코드를 절약해 주는 10가지 최고의 수집 방법입니다.

1. Iterable.forEach(Consumer<? super T> 액션)

이름은 그 자체로 말합니다. 전달된 컬렉션을 반복하고 action각 요소에 대해 람다 식을 실행합니다.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.forEach(s -> System.out.print(s + " "));
1 2 3 4 5 6 7

2. Collection.removeIf(조건자<? super E> 필터)

복잡한 것도 없습니다. 이 메서드는 컬렉션을 반복하여 일치하는 요소를 제거합니다 filter.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.removeIf(s -> s > 5);
 numbers.forEach(s -> System.out.print(s + " "));
한 줄에서 5보다 큰 모든 숫자를 목록에서 제거합니다.

3. Map.forEach(BiConsumer<? super K, ? super V> 액션)

이 메서드는 forEach인터페이스를 구현하는 클래스뿐만 Collection아니라 Map.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

4. Map.compute(K 키,BiFunction<? super K, ? super V, ? 확장 V> remappingFunction)

조금 더 위협적으로 보이지만 실제로는 이전의 모든 것과 마찬가지로 간단합니다. 지정된 키에 대해 key이 메소드는 값을 함수의 결과로 설정합니다 remappingFunction. 예를 들어:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));

books.compute("Философия Java", (a,b) -> b+", крутой чувак");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_______________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель, крутой чувак
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
" Java Philosophy " 의 저자는 확실히 멋지네요! :)

5. Map.computeIfAbsent(K 키, Function<? super K, ? 확장 V> mappingFunction)

이 메소드는 Map 에 새 요소를 추가 하지만 동일한 키를 가진 요소가 없는 경우에만 해당됩니다. 함수 실행 결과가 value여기에 할당됩니다 mappingFunction. 해당 키를 가진 요소가 이미 존재하는 경우 덮어쓰지 않고 그대로 유지됩니다. 우리 책으로 돌아가서 새로운 방법을 시도해 봅시다:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfAbsent("Гарри Поттер и узник Азкабана", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
우리의 기능 mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
그리고 여기 새 책이 있습니다:
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent(K 키, BiFunction<? super K, ? super V, ? 확장 V> remappingFunction)

와 동일한 원리이지만 Map.compute()모든 계산은 키가 있는 요소가 이미 존재하는 경우에만 수행됩니다 key.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfPresent("Евгений Онегин", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
books.computeIfPresent("Братья Карамазовы", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
함수가 처음 호출되었을 때 Map우리 책에는 "Eugene Onegin"이라는 제목의 책이 없기 때문에 아무런 변화가 없었습니다. 그러나 프로그램은 두 번째로 "The Brothers Karamazov"라는 책의 저자를 "Alexander Pushkin"으로 변경했습니다. 결론:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault(객체 키, V defaultValue)

키에 해당하는 값을 반환합니다 key. 해당 키가 없으면 기본값을 반환합니다.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

String igor = books.getOrDefault("Слово о полку Игореве", "Неизвестный автор");
System.out.println(igor);
매우 편안하게:
Неизвестный автор

8. Map.merge(K 키, V 값, BiFunction<? super V, ? super V, ? 확장 V> remappingFunction)

나는 이 방법을 사용하면 몇 줄의 코드가 절약될지 계산해 보지도 않았습니다.
  • Map키가 귀하의 키에 key존재하지 않거나 value이 키가 동일할 경우 메소드 null는 를 추가합니다 .Mapkey-value
  • 키가 Key존재하고 존재하는 경우 value != null메서드는 value전달된 함수를 실행한 결과로 키를 변경합니다 remappingFunction.
  • remappingFunction를 반환 null하면 컬렉션 key에서 제거됩니다.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.merge("Философия Java", "Брюс Эккель", (a, b) -> b +  " и кто-то там еще");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
결론:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*미안해요 브루스*

9. Map.putIfAbsent(K 키, V 값)

이전에는 쌍이 Map없을 경우 추가하려면 다음을 수행해야 했습니다.
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
이제 모든 것이 훨씬 간단해졌습니다.
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace 및 Map.replaceAll()

목록의 마지막이지만 최소한은 아닙니다. — 해당 키가 있는 경우 Map.replace(K key, V newValue키 값을 key로 바꿉니다. newValue그렇지 않으면 아무 일도 일어나지 않습니다. Map.replace(K key, V oldValue, V newValue)- 동일한 작업을 수행하지만 현재 값 keyoldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)— 모든 값을 value함수 실행 결과로 바꿉니다 function. 예를 들어:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replace("Братья Карамазовы", "Брюс Эккель", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
작동하지 않았다! 현재 카라마조프 형제 키 값은 브루스 에켈이 아닌 표도르 도스토옙스키이므로 달라진 점은 없습니다.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replaceAll((a,b) -> getCoolWriter());
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
public static String getCoolWriter() {
        return "Крутой писатель";
    }
Название:Братья Карамазовы. Author: Крутой писатель
Название:Философия Java. Author: Крутой писатель
Название:Преступление и наказание. Author: Крутой писатель
Название:Война и мир. Author: Крутой писатель
Название:Властелин Колец. Author: Крутой писатель
복잡한 구성 없이 맵 전체의 값을 쉽게 변경할 수 있습니다! PS 새로운 것에 익숙해지는 것은 언제나 어려운 일이지만, 이런 변화는 정말 좋습니다. 어쨌든 내 코드의 일부 부분은 이전보다 확실히 덜 스파게티와 비슷해졌습니다 :) 기사가 마음에 들었고 새로운 기사를 보고 싶다면 "좋아요"를 클릭하여 대회에서 작성자를 지원하는 것을 잊지 마세요. 더 좋은 점은 "좋아요"입니다 :) 공부에 행운이 있기를 바랍니다!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION