Lamdba optional-stream

27102 단어

순서


어쩔 수 없이 공부하니까 시간이 참 빠르네요. 그리고 아무 생각 없이 공부에만 집중하면 돼요. 그런데 시간이 너무 빨라요. 헤헤, 아직 공부 안 한 게 많아요. 천천히 해요. 짱이에요.

optional


NullPointer Exception은 모두가 낯설지 않을 거라고 믿습니다. 헤헤, 보통 판정 처리를 하지 않을 때 NullPointer Exception 이상을 던지지만 가끔은if...else 코드를 씁니다. 코드가 보기 흉합니다. 다음은java9이 제공하는 옵션이 이상을 어떻게 처리하는지 추천합니다.
이러한 문법은 사실if와 차이가 없다. 즉, 존재 여부를 판단하는 것이다
      Optional<String> optionalS = Optional.empty();
        if (optionalS.isPresent()){
     
            System.out.println(optionalS.get());     //    if        
        }

권장 사용 방법 1
optionalS.ifPresent(item-> System.out.println(item));  //      

권장 사용 방법 2 Optional.ofNullable(Object)
  Optional<Company> optionalCompany = Optional.ofNullable(company);
  System.out.println(optionalCompany.map(theCompany -> theCompany.getEmployeeList()).orElse(Collections.emptyList()));

우리가 stream 흐름을 사용할 때 우리가 판정공 처리를 하지 않은 것을 발견할 수 있는데, 누가 우리를 도와 주었습니까?맵의 밑바닥이 어떻게 이루어졌는지 봅시다. 되돌아오는 대상은optional이고 Optional을 사용했습니다.ofNullable (), 나는 최근에 원본 코드를 읽는 데 착수했다. 이것도 내가 갑자기 원본 코드를 읽고 싶은 이유이다. 바로 우수한 코드가 어떻게 작성되었는지 보고 싶다.우아하다
  public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
     
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
     
            return Optional.ofNullable(mapper.apply(value));
        }
    }

optional if else


옵션에 매우 편리한 것은else를 제공하는 방식이고 업무 코드를 쓸 때도 매우 편리하다.만약 비어 있으면 월드를 가져옵니다.
optionalS.orElse("world");
optionalS.orElseGet(() -> "sadf");

Stream


Stream 방식 만들기

Stream<String> stringStream = Stream.of("1", "2", "3");
String[] stream= new String[]{
     "1","2","3"};
Stream<String> stream1 = Arrays.stream(stream);
Stream<String> stream2 = Stream.of(stream);



stream 형식 변환


배열 유형으로 변환
Stream<String> stringStream = Stream.of("dfsa", "bd", "dc");
String[] strings = stringStream.toArray(length -> new String[length]);


방법 인용 방식을 그룹 형식으로 변환
String[] strings1 = stringStream.toArray(String[]::new);

list 결합으로 변환
List<String> collect = stringStream.collect(Collectors.toList());

지정된 유형으로 변환
Set<String> collect1 = stringStream.collect(Collectors.toCollection(TreeSet::new));

내재와 외재


stream의 조작은 내재적인 조작과 같다. 지난 블로그에서 파라미터가 전달하는 것은 행위라고 말했기 때문에 흐름 안에 저장된 것은 조작이다. 아래의 lamda가 for를 사용하면 외부 조작이다. 왜냐하면 그가 저장한 것은 데이터이기 때문에 데이터를 꺼내서 다시 조작하기 때문에 절차가 매우 복잡할 것이다.
List<String> list = Arrays.asList("hell", "worl");
list.stream().mapToInt(item->item.length()).filter(Length->Length==5).findFirst().ifPresent(System.out::print);

그러나 설명하고자 하는 것은 stream 흐름이 직렬 조작(stream, 즉 병렬 실현parallelstream)을 하기 때문에 실행할 때 우리가 stream 흐름을 합병해야 할 때가 있다는 것을 발견할 수 있다. 다음은 flatMap이 큰 역할을 한다.
 list.stream().mapToInt(item->{
     
           int length=item.length();
           System.out.println(item);
           return length;
       }).filter(Length->Length==5).findFirst().ifPresent(System.out::print);


flatMap의 효과를 사용하여 string[]에서 string으로 변환
List<String> collect1 = list.stream().map(item -> item.split(" ")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());

lamda를 어떻게 빨리 사용하는지는 간단합니다. 당신은 그를 sql문장으로 보면 됩니다. 간단한api를 사용하면 됩니다. 사실 저는 밑바닥이 어떻게 실현되는지 알고 싶지만 매번 볼 때마다 머리가 커서 천천히 성장하고 있습니다~
sql 
select name from student where age > 20 and name ='beijing' order by age desc;

Student student=new Student(25,"judy");
        List<Student> list = new ArrayList<>();
        list.add(student);
        list.stream().filter(student1 -> student1.getAge() > 20).filter(student1 -> student1.getName().equals("judy")).sorted().forEach(student1 -> System.out.println(student.getName()));

group by
Map<Integer, Long> collect = list1.stream().collect(Collectors.groupingBy(Student::getAge, Collectors.counting()));

  
Map<Boolean, List<Student>> collect1 = list1.stream().collect(Collectors.partitioningBy(student4 -> student.getAge() > 20));
System.out.println(collect1.get(true));

방법 인용


방법 인용은 세 가지 상황에서 클래스 이름을 사용할 수 있다. 정적 방법명 인용명(대상): 방법명 클래스명: 실례명
이 세 가지 장면을 볼 때 관련이 있는지 없는지 왜 이 세 가지가 이루어질까요?그들은 틀림없이 비슷한 점이 있기 때문에 이렇게 사용할 수 있다. 만약 네가 알고 있다면 와서 교류를 하자. 하하하하
        //  ::     
        qtudentList.sort(Qtudent::compareAge);
        qtudentList.forEach(student -> System.out.println(student.getAge()));

        //   (  )::   
        QtudentCompare qtudentCompare = new QtudentCompare();
        qtudentList.sort(qtudentCompare::compareAge);
        qtudentList.sort(qtudentCompare::compareName);

        //   ::    
        qtudentList.sort(Qtudent::compareAge1);

엔딩


저는 한 편만 더 하고 정리했습니다. 많은 내용을 제가 쓰지 못했습니다. 어떻게 써야 할지 모르거나 이해가 얕기 때문입니다. 다음 제 계획은springmvc입니다. 이후의 공식 계정은 매일 업데이트하고 내용을 갱신합니다. 1 일상 자율 2 springmvc 원본 학습 3 독서를 하고 카드를 준비하며 일주일 동안 칩니다. 목표는 우선 작습니다. 하하하하.

좋은 웹페이지 즐겨찾기