Stream
이전 기사에서는 Java 8의 새로운 기능인 람다 표현식을 비즈니스에 능숙하게 사용하면 많은 코드를 절약하고 훨씬 깔끔하게 보일 수 있다고 설명했습니다. 그런 다음 이 기사에서는 또 다른 새로운 기능인 StreamStream을 소개합니다. 잘못 읽지 마세요! ! ! 게임steam을 하기 위한 것이 아닙니다! !
1. 스트림이란?
Stream은 Java 8에서 제안한 새로운 개념입니다. 입출력 스트림이 아니라(실제로 IO 스트림과 관련이 없습니다)을 사용하는 함수입니다. 프로그래밍 방식 컬렉션 클래스 운영을 위한 도구입니다. 간단히 말해서 내부 반복 방식으로 컬렉션 데이터를 처리하는 작업입니다. 내부 반복을 통해 컬렉션 클래스에 더 많은 제어권을 부여할 수 있습니다. Stream과 Iterator의 기능은 유사하지만 Iterator는 외부 반복 형식으로 컬렉션 데이터를 처리하는 작업이라는 점만 다릅니다.
물론 Stream에도 고유한 특성이 있습니다.
1. 이는 데이터 구조가 아니며 데이터를 저장하지 않습니다. 2 이러한 작업은 게으른 작업입니다. 즉, 액세스할 때마다 스트림의 요소만 이 요소에 대해 이러한 일련의 작업을 수행합니다3. 데이터가 저장되지 않으므로 각 스트림은 한 번만 사용할 수 있습니다.Stream 스트림 구현 다이어그램:
Stream 공식 문서:
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html
먼저 네 가지 방법을 살펴보겠습니다.
1.filter: 람다 식을 사용하여 조건부 필터링 구현 2.limit: 스트림 가로채기, 스트림 섹션 가로채기3.skip: 오버플로 건너뛰기 4.distinct: 중복 제거
스트림 생성:
public class Test { public static void main(String[] args) { String [] arr = {"东","南","西","北"}; //将数组转换成Stream Stream<String> stream = Arrays.stream(arr); stream = Stream.of(arr); stream = Stream.of("东","南","西","北"); //将list集合转换成stream List<String> list = Arrays.asList("aa","cc","bb","aa","dd"); stream = list.stream(); //排序、去重、遍历 list.stream().sorted().distinct().forEach(System.out::println); //用过Stream流操作完集合后还可以再转换成一个新的集合 List<String> newList = list.stream().sorted().distinct().collect(Collectors.toList()); System.out.println(newList.toString()); } }
출력:
//중복 항목을 탐색하고 제거한 후의 결과:aa
bb
cc
dd
//Used Stream 스트림이 컬렉션을 운영한 후 새로운 컬렉션으로 변환할 수 있습니다.
[aa, bb, cc, dd]
네 가지 작업 방법: Person 클래스:
이 클래스에는 get/set 메소드가 작성되어 있지 않은 많은 코드, 사용할 때 잊지 마세요! !
public class Person { private String name; private Integer age; private String country; private char sex; @Override public String toString() { return "信息表:{" + "name='" + name + '\'' + ", age=" + age + ", country='" + country + '\'' + ", sex=" + sex + '}'; } //这里节省的get/set代码 //重写toString() 和 equals 和 hashcode 方法 @Override public boolean equals(Object o){ if(this == o) return true; if(o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if(country != null){ if(this.country.equals(person.country)){ return true; }else{ return false; } } return false; } @Override public int hashCode(){ return Objects.hash(country); } }
테스트 클래스:
람다 표현식을 결합하여 작성public class Test { public static void main(String[] args) { List<Person> perosnList = new ArrayList<>(); perosnList.add(new Person("王一", 30, "中国", 'M')); perosnList.add(new Person("张三", 19, "美国", 'F')); perosnList.add(new Person("李四", 29, "日本", 'F')); perosnList.add(new Person("小美", 74, "英国", 'M')); perosnList.add(new Person("熊二", 15, "意大利", 'F')); perosnList.add(new Person("熊大", 66, "韩国", 'F')); //返回年龄大于20岁的学生集合 System.out.println("返回年龄大于20岁的学生集合"); perosnList.stream().filter(p -> p.getAge() > 20).forEach(System.out::println); //返回年龄大于50岁的学生集合 System.out.println("返回年龄大于50岁的集合"); List<Person> list = perosnList.stream().filter(p -> p.getAge() > 50).collect(Collectors.toList()); System.out.println(list); //返回年龄大于20岁的中国学生 System.out.println("返回年龄大于20岁的中国人"); perosnList.stream().filter(p -> p.getAge() > 20).filter(p -> p.getCountry().equals("韩国")).forEach(System.out::println); //年龄大于20 中国 性别M System.out.println("返回年龄大于20 中国 性别M"); perosnList.stream().filter(p -> p.getAge() > 20 && p.getCountry().equals("中国") && p.getSex() == 'M').forEach(System.out::println); } }
결과 보기:
20세 이상의 학생 컬렉션 반환정보 테이블: {name='王一' , age=30, country='중국', sex=M}
정보 테이블: {name='lee思', age=29, country='일본', sex=F}
정보 테이블: {name='Xiao 메이', age=74, country='UK', sex=M}
정보 테이블: {name='Xiong Da', age=66, country='South Korea', sex=F}
사람 컬렉션을 반환합니다. 50세 이상
[정보 테이블: {name='Xiaomei', age=74, country='UK', sex=M}, 정보 테이블: {name='Xiong Da', age=66, country=' South Korea', sex =F}]
20세 이상의 중국인을 반환합니다
정보 테이블: {name='Xiong Da', age=66, country='South Korea', sex=F}
인을 반환합니다 20세 이상 중국 성별 M
정보 테이블 :{name='王一', age=30, country='China', sex=M}
요약:
스트림 스트림을 사용하면 쉽게 배열이나 컬렉션을 연산하고, 람다 표현식과 결합해 만들 수도 있다. 표현식은 깔끔하고 명확하다. 사실 자바에서 나온 새로운 기능이기 때문에 유용할 것이다. 3. Stream의 지도 매핑 스트림public class Test {
public static void main(String[] args) {
//map的作用是迭代取到每个list元素,再通过map里面的函数进行相应的操作
List<String> list1 = Arrays.asList("a","bb","ccc","dddd");
//通过map取到每个集合元素的长度并返回
Stream<Integer> stream = list1.stream().map(p->p.length());
stream.forEach(System.out::println);
System.out.println("----------------");
List<String> userList = new ArrayList<>();
userList.add("周杰伦.tom");
userList.add("尼古拉斯.赵四");
userList.add("牛顿.巴基斯");
userList.add("赵少华.思密达");
List<String> uList = userList.stream().map(p->p.substring(p.indexOf(".")+1,
p.length())).collect(Collectors.toList());
System.out.println(uList.toString());
}
}
출력:
14. 스트림 검색 및 매칭Stream에도2
3
4
----------------
[tom, Zhao Si, Pakistan , Smecta]
메소드가 있습니다: anyMatch(Predicate predicate)
이 스트림의 요소가 제공된 단어와 일치하는지 여부를 반환합니다
Demo:
public class Test { public static void main(String[] args) { List<String> list = Arrays.asList("周杰伦","王力宏","孙燕姿","林俊杰"); boolean flag1 = list.stream().anyMatch(ele->ele.contains("燕")); System.out.println("有没有名字包含燕的同学:"+flag1); //判断开头: boolean flag2 = list.stream().anyMatch(ele->ele.startsWith("王")); System.out.println("有没有名字开头是王的同学:"+flag2); //判断结尾: boolean flag3 = list.stream().anyMatch(ele->ele.endsWith("杰")); System.out.println("有没有名字结尾是杰的同学:"+flag3); // anyMatch是匹配所有的,要满足条件 boolean flag4 = list.stream().anyMatch(ele->ele.length()>2); System.out.println("所有同学的名字都是两个字以上的吗"+flag4); boolean flag5 = list.stream().anyMatch(ele->ele.startsWith("王")); System.out.println("所有同学的名字都有王吗?"+flag5); //noneMatch boolean flag6 = list.stream().noneMatch(ele->ele.contains("燕")); System.out.println("集合中都没有包含'燕'这个字吗"+flag5); } }
출력:
이름에 Yan: true가 포함된 반 친구가 있습니까? 학생들 이름이 모두 왕(Wang)이에요? true컬렉션에 'Yan'이라는 단어가 포함되어 있지 않습니까? true
anyMatch()의 메소드를 사용하면 이 스트림의 정보를 쉽게 일치시킬 수 있습니다.
위 내용은 Java에서 스트림 흐름 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

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