"가 Java 8에 도입되었습니다."/> "가 Java 8에 도입되었습니다.">
Lambda 표현식
1 익명 내부 클래스 객체의 형식을 단순화한 것입니다
2. Java 8에서는 화살표 연산자 또는 람다 연산자라고 불리는 새로운 연산자 "->"가 도입되었습니다. 3. 앞 부분과 뒷 부분을 두 부분으로 나누는 기능입니다.
4. 왼쪽: 람다 표현식의 매개변수 목록(인터페이스에 정의된 추상 메소드의 매개변수)
5. : 메소드 본체, 람다 본체를 나타냅니다
작성 구문 형식
1. 매개변수도 없고 반환 값도 없습니다
왼쪽의 괄호는 생략할 수 없고, 오른쪽의 중괄호는 생략해도 됩니다
2. 매개변수 1개, 반환값 없음
매개변수 여러 개, 반환값 없음
왼쪽 괄호 생략 가능, 오른쪽 괄호 생략 가능
3. 인터페이스에서 다시 작성해야 함 내용이 많고 여러 문장에 중괄호를 추가해야 합니다
참고: 람다 본문에 명령문이 하나만 있는 경우 중괄호를 생략할 수 있습니다. 람다에 문이 하나만 있고 return 문이면 return 키워드를 생략할 수 있습니다.
Functional 인터페이스Lambda 표현식을 사용하는 전제는 인터페이스가 기능적 인터페이스여야 한다는 것입니다. 인터페이스에 추상 메서드가 하나만 있으면 이 인터페이스는 기능적 인터페이스입니다. 현재 인터페이스가 기능적 인터페이스 @FunctionalInterface인지 확인하는 데 일반적으로 주석이 사용됩니다.
함수:
내가 표현하고 싶은 것은 메소드의 내용입니다. 어떤 클래스에도 메소드가 없기 때문에 인터페이스가 실제로 표현하려는 것은 함수의 선언입니다. , 이 인터페이스의 구현 클래스 객체를 사용하여 함수의 구현을 표현합니다.
소비자 인터페이스:
추상 메서드:void accept(T t)
함수가 데이터 조각을 받아들이고 데이터를 처리할 수 있는 경우 , 처리가 완료된 후에는 데이터를 반환할 필요가 없습니다. 따라서 소비 인터페이스를 사용하세요package cn.ujiuye.function; import java.util.function.Consumer; import cn.ujiuye.domin.Mobile; /** * @author liugang * 消费型接口方式 */ public class CustmoerTest { public static void main(String[] args) { Mobile m = new Mobile("华为",3000); //lambad表达式实现赋值 内部显然是对消费者接口的使用,故是对函数式接口编程的新东西 updateMobile(m, x -> x.setPrice(x.getPrice() + 1000 )); System.out.println(m); } //调用其使用的方法 private static void updateMobile(Mobile m, Consumer<Mobile> con) { for (int i = 0; i < 3; i++) { con.accept(m); } } }
메서드 참조
1. 메소드는 다른 객체에 의해 구현되었으므로 Lambda에서 이 구현을 다시 호출할 필요는 없지만 직접 정의할 수 있습니다. Method
2. Format기능적 인터페이스: 이름 = 객체 이름:: 메소드 이름 기능적 인터페이스: 이름 = 클래스 이름:: 정적 메소드 이름3. Function 구현된 것을 데이터로 처리하고, 기능적 인터페이스의 참조에 할당된 참조를 반환 값으로 사용할 수 있습니다. 메소드 또는 구현 클래스 객체로StreamingAPI
jdk1.8에서는 스트림이 제공되므로 컨테이너에 있는 데이터를 쉽게 조작할 수 있으며 데이터 필터링, 출력 및 기타 작업을 완료할 수 있습니다. Stream 유형 및 일반 메서드 가져오기컬렉션 가져오기: stream() 메서드 호출, Stream 개체 호출종료 메서드: foreach countDelay 메서드: 필터 제한 건너뛰기 , etc.package cn.ujiuye.stream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Stream; /** * @author liugang * */ public class StreamApiDemo03Demo03 { public static void main(String[] args) { //定义一个集合,并获取stream类型的数据 List<Integer> list = new ArrayList<Integer>(); Collections.addAll(list, 12,32,-13,50,100); Stream<Integer> stream = list.stream(); stream.forEach(x ->System.out.println(x - 100)); System.out.println(list.stream().count()); } } package cn.ujiuye.stream; import java.util.ArrayList; import java.util.Collections; import java.util.stream.Stream; /** * @author liugang * Stream中一些方法的使用 */ public class StreamApiDemo04 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); Collections.addAll(list, -4,-12,-199,0,15,25,36,100); Stream<Integer> stream = list.stream(); stream.filter(x -> x > 0) //过滤 .skip(1) //跳过 .limit(2) //限制 .sorted((x,y) -> -1) //排序 .forEach(System.out::println); } }Exercise Stream 메서드를 사용하여 팀 내 여러 구성원의 이름을 저장하는 두 가지 Arraylist 컬렉션이 있습니다. 아래 단계를 따르세요. 1. 첫 번째 팀에는 이름이 3자인 구성원만 필요합니다. 2. 첫 번째 팀은 심사 후 처음 3명만 필요합니다3. 두 번째 팀은 장씨 성의 멤버만 필요합니다
4. 두 번째 팀은 필터링 후 첫 두 명을 삭제하지 마세요5. 두 팀을 하나의 팀으로 병합 6. 병합된 팀의 모든 사람의 Person(사용자 정의 유형) 개체를 ArrayList Gathering에 저장합니다.팀 1: Miyamoto Musashi, Song Gongming, Su Youpeng, Stone Man, Shi Chuanxiang, Li Er, Zhuang Zi, Hong Qigong2팀: Pavarotti, Zhang Sanfeng, Zhao Weiwei, Zhang Zizhong, Bo'er Jijin Temujin, Zhang Tianai, Zhang Cuihua
public class StreamApiTest { @SuppressWarnings("unused") public static void main(String[] args) { //创建集合 List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList<String>(); //把元素添加到集合中 Collections.addAll(list1, "宫本武藏","宋公明","苏有朋","石头人","时传祥","李耳","庄子","洪七公"); Collections.addAll(list2, "帕瓦罗蒂","张三疯","赵薇薇","张自忠","孛儿只斤铁木真","张天爱","张翠花"); //创建Stream对象 Stream<String> stream1 = list1.stream(); Stream<String> stream2 = list2.stream(); //创建筛选后的元素 Stream<String> limit1 = stream1.filter(x -> x.length() == 3).limit(3); Stream<String> limit2 = stream2.filter(x -> x.startsWith("张")).skip(2); //将两对的人合到同一个对里 Stream<String> concat = Stream.concat(limit1, limit2); //定义一个集合用来存对象 List<Person> list = new ArrayList<Person>(); //想要的是一个Person对象的流 //Stream<Person> map = concat.map(x -> new Person(x); Stream<Person> map = concat.map(Person::new); //将流对象添加到集合中 map.forEach(list::add); System.out.println(list); } }
위 내용은 Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!