찾다
Javajava지도 시간Java8 StreamAPI에서 map() 메소드를 사용하는 방법

머리말

일상적인 개발 작업에서 우리는 객체 컬렉션에서 객체의 속성 컬렉션을 얻는 등 List의 데이터를 처리하는 문제에 자주 직면합니다. 이전에 우리가 생각한 것은 각 요소를 탐색한 다음 이를 꺼내서 다른 컬렉션에 넣는 것이었습니다. 이는 더 번거롭습니다. Java 8 이후에는 컬렉션에서 스트림 작업을 수행할 수 있으므로 위의 처리가 더욱 간결해집니다.

Overview

Stream 스트리밍 처리에는 map() 메소드가 있습니다. 먼저 그 정의를 살펴보겠습니다. 이 메소드는 java.util.stream.Stream 클래스에 있습니다.

Java8 StreamAPI에서 map() 메소드를 사용하는 방법

맵을 보면 알 수 있습니다. () 메소드는 함수 표현식 인터페이스 매개변수를 수신하고, 입력 매개변수는 T를 가지며, 스트림 스트림은 R 일반입니다. 주로 다음 사항에 유의해야 합니다.

  • 입력 매개변수는 스트림의 요소입니다.

  • 출력 매개변수는 스트림이고 스트림은 새 요소입니다. 원본 스트림에는 4개의 원형 패턴이 있습니다. map() 함수를 호출하면 4개의 다섯개 별 패턴이 됩니다. 원형 패턴과 여기의 다섯개 별 패턴은 일대일 대응입니다. 즉, 원래 스트림에 요소가 몇 개 있는지를 나타냅니다. 호출 map() 메서드 뒤에도 여전히 많은 요소가 있습니다. 변경되는 유일한 것은 스트림의 요소 유형입니다.

Java8 StreamAPI에서 map() 메소드를 사용하는 방법먼저 엔터티 클래스 Student.java를 생성합니다

@Data
public class Student implements Serializable {
    /**
     * 姓名
     */
    private String name;
    /**
     * 班级
     */
    private String schoolClass;
    /**
     *语文成绩
     */
    private Integer chineseScore;
    /**
     * 数学成绩
     */
    private Integer mathScore;
}

그런 다음 데이터를 초기화하는 클래스를 생성합니다.

public class DataFactory {
    public static List<Student> initData(){
        List<Student> list= new ArrayList<>();
        Student s1=new Student();
        s1.setName("汤霖");
        s1.setSchoolClass("小一班");
        s1.setChineseScore(87);
        s1.setMathScore(95);
        list.add(s1);
 
        Student s2=new Student();
        s2.setName("李牧唐");
        s2.setSchoolClass("小二班");
        s2.setChineseScore(98);
        s2.setMathScore(97);
        list.add(s2);
 
        Student s3=new Student();
        s3.setName("顾北辰");
        s3.setSchoolClass("二年级");
        s3.setChineseScore(89);
        s3.setMathScore(94);
        list.add(s3);
 
        Student s4=new Student();
        s4.setName("言言");
        s4.setSchoolClass("小二班");
        s4.setChineseScore(100);
        s4.setMathScore(90);
        list.add(s4);
 
        Student s5=new Student();
        s5.setName("大运");
        s5.setSchoolClass("小三班");
        s5.setChineseScore(96);
        s5.setMathScore(100);
        list.add(s5);
        return list;
    }
}

모든 학생 이름을 알아냅니다

public static void main(String[] args) {
    DataFactory.initData().stream()
        .map(student -> student.getName())
        .forEach(System.out::println);
}

여기서는 map() 메소드가 사용됩니다 , 입력 매개변수는 Student이고, 출력 매개변수는 String을 제네릭 타입으로 한 스트림입니다. 마지막으로 forEach를 사용하여 출력한 결과를 보면 모든 학생의 이름이 출력된 것을 알 수 있습니다. 이러한 학생 이름을 목록에 추가하려면 어떻게 해야 합니까?

목록에 학생 이름을 넣어보세요

public static void main(String[] args) {
    //将所有的学生姓名放到list中
    List<String> studentNames = DataFactory.initData().stream()
        .map(student -> student.getName())
        .collect(Collectors.toList());
    for (String studentName : studentNames) {
        System.out.println(studentName);
    }
}

마찬가지로 모든 수업을 찾아 전체 학생의 점수를 알아내면 위와 같이 출력된 학생 이름이나 수업에 중복된 데이터가 있는 것을 확인할 수 있습니다. 해결 방법. 우리는 데이터가 마지막에 List에 저장된다는 것을 알고 있습니다. 중복 문제를 해결하기 위해 데이터를 Set에 넣고 Set의 중복 제거 기능을 사용할 수 있습니다. Java8 StreamAPI에서 map() 메소드를 사용하는 방법

//将学生姓名放到Set中,可以实现去重功能
Set<String> studentNames = DataFactory.initData().stream()
    .map(student -> student.getName())
    .collect(Collectors.toSet());

결과는 더 이상 인쇄되지 않습니다. 관심이 있으시면 직접 시도해 볼 수 있습니다.

Tang Lin이라는 학생의 중국어 점수를 90으로 설정

이제 Tang Lin이라는 학생의 중국어 점수를 90으로 설정해야 합니다. 사용법 map() 함수는 어떻게 하나요?

public static void main(String[] args) {
    List<Student> students = DataFactory.initData();

    List<Student> studentNames = students.stream().map(student -> {
        if ("汤霖".equals(student.getName())) {
            student.setChineseScore(90);
        }
        return student;
    }).collect(Collectors.toList());

    for (Student studentName : studentNames) {
        System.out.println(studentName);
    }
    //打印老的list
    System.out.println("-----改之前的数据-----");
    for (Student studentName : students) {
        System.out.println(studentName);
    }
}

출력 결과:

Java8에서 map() 메소드를 사용하는 방법 StreamAPI

위 결과를 보면 Tang Lin의 중국어 점수가 실제로 90으로 변경된 것을 알 수 있는데, 이는 정확합니다. 원본 데이터를 보면 역시 90으로 변경된 것을 알 수 있는데, 위에서 언급한 것처럼 map() 메소드는 새로운 스트림을 생성하는데, 원본 스트림의 데이터도 다음과 같은 이유로 수정되었습니다. 코드 줄이 원본에 있음 참조 유형의 데이터가 스트림의 요소에 따라 수정되면 원본 스트림의 데이터도 수정됩니다.

위 내용은 Java8 StreamAPI에서 map() 메소드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경