"가 Java 8에 도입되었습니다."/> "가 Java 8에 도입되었습니다.">

 >  기사  >  Java  >  Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.

Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.

(*-*)浩
(*-*)浩앞으로
2019-10-23 16:12:152573검색

Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.

Lambda 표현식

1 익명 내부 클래스 객체의 형식을 단순화한 것입니다

2. Java 8에서는 화살표 연산자 또는 람다 연산자라고 불리는 새로운 연산자 "->"가 도입되었습니다. 3. 앞 부분과 뒷 부분을 두 부분으로 나누는 기능입니다.

4. 왼쪽: 람다 표현식의 매개변수 목록(인터페이스에 정의된 추상 메소드의 매개변수)

5. : 메소드 본체, 람다 본체를 나타냅니다

작성 구문 형식

1. 매개변수도 없고 반환 값도 없습니다

왼쪽의 괄호는 생략할 수 없고, 오른쪽의 중괄호는 생략해도 됩니다

Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.
2. 매개변수 1개, 반환값 없음

매개변수 여러 개, 반환값 없음

왼쪽 괄호 생략 가능, 오른쪽 괄호 생략 가능

Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.3. 인터페이스에서 다시 작성해야 함 내용이 많고 여러 문장에 중괄호를 추가해야 합니다

Java8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.참고: 람다 본문에 명령문이 하나만 있는 경우 중괄호를 생략할 수 있습니다. 람다에 문이 하나만 있고 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

구현된 것을 데이터로 처리하고, 기능적 인터페이스의 참조에 할당된 참조를 반환 값으로 사용할 수 있습니다. 메소드 또는 구현 클래스 객체로

StreamingAPIJava8의 새로운 기능은 람다, 기능적 인터페이스, StreamingAPI입니다.

jdk1.8에서는 스트림이 제공되므로 컨테이너에 있는 데이터를 쉽게 조작할 수 있으며 데이터 필터링, 출력 및 기타 작업을 완료할 수 있습니다.

Stream 유형 및 일반 메서드 가져오기

컬렉션 가져오기:

stream() 메서드 호출, Stream 개체 호출

종료 메서드: foreach count

Delay 메서드: 필터 제한 건너뛰기 , 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 Qigong

2팀: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:Java의 빠른 정렬다음 기사:Java의 빠른 정렬