java8에서 lamba 표현식의 사용

5952 단어 java8lambda표현식
(-1) 앞말
lamba 표현식을 배우는 것은 매우 중요합니다. 자바가 많이 좋아졌다는 것을 알게 될 것입니다.
(0) 함수식 인터페이스
오직 한 가지 방법의 인터페이스를 함수식 인터페이스라고 부른다

JButton jButton = new JButton("123");
  jButton.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {}});
... 과 같다

jButton.addActionListener(e->System.out.println("Hello world"));
  jButton.addActionListener((e)->System.out.println("Hello world"));
  jButton.addActionListener((ActionEvent e)->System.out.println("Hello world"));
  jButton.addActionListener((ActionEvent e)->{System.out.println("Hello world");return;});
a. 규칙
  A->B
A 섹션은 전송 방법의 매개 변수입니다.
B 부분은 함수체입니다.
매개 변수 유형 및 반환 유형
매개 변수가 하나이고 그 유형이 유도될 수 있을 때, 이 매개 변수 목록 밖의 괄호는 생략될 수 있다
함수체가 하나의 문장만 있고 반환 형식이 유도될 수 있을 때 {} 생략가능
b. 예

Runnable runnable = ()->System.out.println(sign);
  Runnable runnable2 = new Runnable() {
  @Override
  public void run() {
  // TODO Auto-generated method stub}
  };
   run 
  System.out.println(sign)  run 
  Comparator<Integer> lol = (x,y)->x-y;
  Comparator<Integer> lol = (x,y)->{System.out.println(x+y);return x-y;};
  new Comparator<Integer>() {
  @Override
  public int compare(Integer o1, Integer o2) {
  // TODO Auto-generated method stub
  return 0;
  }
};
익명 내부 클래스를 통해compare 방법은 두 개의 매개 변수가 필요하다는 것을 알고 있습니다.
이 때 컴파일은 Comparator에서 Integer를 통해 숙박 유형과 복귀 유형을 유도합니다
c. 깊이 들어가다
lamba 표현식은 함수,java로 볼 수 있습니다.util.function은 자주 사용하는 함수식 인터페이스를 정의합니다
   http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
  BiFunction
T는 첫 번째 매개변수를 나타냅니다.
U는 두 번째 매개변수를 나타냅니다.
R은 반환 값을 나타냅니다.
이 테이블은 T, U, R 모두 컴파일러가 상하문에 따라 유형을 유도해야 한다
Consumer는 e->System을 나타냅니다.out.println("Hello world")
그래서 한 방법이 람바 표현식을 필요로 할 때 매개 변수의 표현 형식은java이다.util.function에서 정의된 스타일
(2) 메소드 참조
메소드 참조는 Lamba 표현식의 단순화입니다.
클래스 이름::메서드 이름(대상 메서드, 클래스 메서드)

int[] oop = {3,1,2,1};
  static void sayHello(Integer name)
  {
  System.out.println(123);
  }
  Arrays.stream(oop).forEach(Test::sayHello);
  Arrays.stream(oop).forEach(s->Test.sayHello(s));
구조 방법 참조:Class::new
배열 구성 방법 참조: TypeName[]:new
(3) 유형 변환 강제
때때로 컴파일러가 상하문을 통해 유도한 반환 형식이 실제 형식과 맞지 않을 때 입력 형식 변환이 필요하다

Stream<Object> strings = shapelist.stream().<Object>map(s->s.getColor());
  s.getColor())
s.getColor()는 String으로 돌아옵니다.
(4)lamba 표현식이 자바 대상에서의 응용
너는 어떤 자바 대상에서lamba 표현식을 응용해 보아야 한다. 통칙은 이 대상을java로 바꾸는 것이다.util.stream, 흐름은 직렬 병행의 구분이 있습니다!병렬 흐름 키워드 parallelStream
배열 배열.stream()
List、Set   .stream()  
String  String.chars
...
java.util.stream은 흐르는 데이터를 조작하는 데 많은 방법을 제공했으니 한번 해 봅시다
http://docs.oracle.com/javase/8/docs/api/
자바 8 영어 API, 중국어를 찾을 수 없는...
(2) 흐름 전체에 대한 조작
예를 들어 우리는 하나의 흐름의 총체를 구할 수 있다

int sum = Arrays.stream(oop).sum();
int sum1 = Arrays.stream(oop).reduce(0,(x,y)->x+y);
(3) 집합 간의 변환
우리는 ArrayList를 ArrayList, Set, HashMap, HashMap 심지어 더 복잡한
a.map()
이 방법은 비추는 뜻(처음에 나는 HashMap을 연상했다), 그리고mapToDouble 등
b.collect()
collect () 는 Collectors 유형의 매개 변수를 받아들여 흐름을 다시 결합합니다.
Collectors는 컬렉터입니다. Collectors.toList(),Collectors.toMap()、Collectors.그룹 By 등
c. 예

public class Shape
  {
  private String color;
  public Shape() {
  // TODO Auto-generated constructor stub
  }
  public String getColor() {
  return color;
  }
  public void setColor(String color) {
  this.color = color;
  }
  public Shape(String color)
  {
  this.color = color;
  }
  }
  ArrayList<String> colorList = new ArrayList<String>(){
  {
  add("Red");
  add("Blue");
  add("Yellow");
  }
  };
  List<Shape> shapeList = colorList.stream().map(Shape::new).collect(Collectors.toList());
  List<String> colos = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toList());
  Set<String> colosSet = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toSet());
  Map<String, String> colorMap = colorList.stream().collect(Collectors.toMap(a->a,s->s));
  Map<String,Shape> shapesMap = shpaeList.stream().collect(Collectors.toMap(s->s.getColor(), s->s));
Eclipse에서 getColor () 메서드를 누를 수 없습니다. 잘못된 줄 알았는데...
  

Map<String,Set<Shape>> shapeMapSet = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.toSet()));
  Map<String,Map<String, List<Shape>>> shapeMap3 = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.groupingBy(s->s.getColor(),Collectors.toList())));
(4) 집합 자체의 조종
새로운 집합이 생기지 않고 기존 집합을 바꾸려면 사용할 수 있다

 Iterable.forEach(Consumer),Collection.removeAll(Predicate),List.replaceAll(UnaryOperator),List.sort(Comparator) Map.computeIfAbsent() 
  shpaeList.sort(Comparator.comparing(Shape::getColor));
위에서 말한 것은 편집자가 여러분께 소개한java8에서 lamba표현식의 사용입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기