lambda表达式

要使用lambda表达式,必须装1.8以上的Java版本(包括1.8)
一 stream(流)
1 通过filter过滤掉不满足条件的属性值(普通类型)
显示list集合中不是bb的所有值

public class FirstClass {
@Test
public void test() {
    List<String> list=new ArrayList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");
    list.add("ee");
    list.stream().filter(s -> null!=s&&!"bb".equals(s))
            .forEach(s -> System.out.println(s));
}
}


在这里插入图片描述
.filter(条件表达式,就是判断语句)
.forEach(要循环的值),.forEach中的变量已经是过滤之后的了


2 通过.filter过滤引用类型,获取姓名不是aa对象的年龄

public class FirstClass {
@Test
public void test() {
Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.stream().filter(p ->!p.getName().equals("aa"))
            .forEach(p->{ System.out.println(p.getAge()); } );
}
}

在这里插入图片描述
3 若是只想做一下过滤,不想输出,需要把过滤结果给其他人使用,怎么办?
.collect 是将.filter过滤完成的结果转为一个新的集合,需要用变量接收

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    List list1=list.stream().filter(p ->!p.getName().equals("aa"))
    .collect(Collectors.toList());
    for(int i=0;i<list1.size();i++){
        System.out.println(list1.get(i));
    }
}
}

 在这里插入图片描述
4 set集合也可以用.collect接收过滤后的结果

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    Set<Person> set=new HashSet<>();
    set.add(person);
    set.add(person1);
    set.add(person2);
    Set  set1=set.stream().filter(p ->!p.getName().equals("aa"))
    .collect(Collectors.toSet());
    Iterator iterator=set1.iterator();
    while (iterator.hasNext()){
        Person s=(Person) iterator.next();
        System.out.println(s.getName());
    }
}
}

 在这里插入图片描述
5 其实特性
limit 例:List.stream().limit(2)返回前两个集合

import lombok.Data;
@Data
public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.stream().limit(2).forEach(f->{
        System.out.println(f);
    });
}
}

 在这里插入图片描述
6 count 例:List.stream().count()返回长度大小,与list.size()一个功能

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    long a=list.stream().count();
    System.out.println(a);
}
}

 在这里插入图片描述
7 findFirst 例:Optional p=list.stream().findFirst();返回集合中的第一个对象要用Optional接收,写入泛型类型

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    Optional<Person> p=list.stream().findFirst();
    System.out.println(p);
}
}

在这里插入图片描述

8 Map就是将某个List内容转换成Map
例把两个人的年龄放到一个新的List里,map里的语法叫函数式接口
语法(引用类型::方法名),就是遍历引用类型Person类,调用getName方法,将获取到的name放在一个新的集合list1里

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    List list1=list.stream().map(Person::getName).collect(Collectors.toList());
    for(int i=0;i<list1.size();i++){
        System.out.println(list1.get(i));
    }
}
}

 在这里插入图片描述
9 将List集合里的对象年龄相加,mapToInt(Person::getAge),还可以mapToDouble还可mapToIong

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("bb");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("cc");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    int ageSum=list.stream().mapToInt(Person::getAge).sum();
        System.out.println(ageSum);
}
}

 在这里插入图片描述

map里要是一般值,不是对象怎么取值,直接get(“Key”)就好
@org.testng.annotations.Test
public void mapTest(){
    List<Map<String,String>> mapList=new ArrayList<>();
    Map<String,String> map =new HashMap<>();
    map.put("userName","aa" );
    map.put("age","十岁" );
    map.put("sex","女" );
    Map<String,String> map1 =new HashMap<>();
    map1.put("userName","bb" );
    map1.put("age","九岁" );
    map1.put("sex","男" );
    mapList.add(map);
    mapList.add(map1);
    List<Map<String,String>> mapList1=mapList.stream().
            filter(m ->m.get("userName").
                    equalsIgnoreCase("bb")).
            collect(Collectors.toList());
    for (Map m:mapList1){
        System.out.println(m);
    }
}

 在这里插入图片描述
10 去重
Distinct:将多个相同内容只保留一个,与set相似,相同元素,只保留一个;据说对象去重要重写HashCode,但是下面这段代码并没有重写HashCode也实现了对象去重

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("aa");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("aa");
    person1.setAge(10);
    Person person2 = new Person();
    person2.setName("aa");
    person2.setAge(10);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.stream().distinct().forEach(p->{
        System.out.println(p);
    } );
}
}

 在这里插入图片描述
11 对象排序方法1
对象排序要指定一个属性,因为对象中有很多个属性(例如:name、age、sex…),并不知道要用哪个属性排序
(Person p1,Person p2)指定的属性p1和p2是两两对比,调用的就是排序方法,排序用的是ASCII码表顺序作为排序依据

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("bb");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("zz");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("xx");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
    list.sort((Person p1,Person p2) ->p1.getName().compareTo(p2.getName()));
    list.forEach(p-> {
        System.out.println(p.getName());
    });
}
}

 在这里插入图片描述
**12 对象排序方法2(返序)

在.sorted()后面加上.reversed()做返序排序;返序完成之后是一个新的流,要用一个变量接收(看清楚,是List list 是Person不是String),才能用forEach打印,或者在当前流直接forEach**

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("bb");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("zz");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("xx");
    person2.setAge(12);
    List<Person> list=new ArrayList();
    list.add(person);
    list.add(person1);
    list.add(person2);
     list.stream().sorted(Comparator.comparing(Person::getName).reversed()).forEach(s ->{
         System.out.println(s.getName());
     });
}
}

 14 如果我们不知道key的时候要获取name=bb这个对象的age,要怎么做?
对于map而言有一个约定,key用字符串存储,在lambda操作map里的值用数组保存

public class Person {
private int age;
private String name;
}


import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class FirstClass {
@Test
public void test() {
    Person person = new Person();
    person.setName("bb");
    person.setAge(10);
    Person person1 = new Person();
    person1.setName("zz");
    person1.setAge(11);
    Person person2 = new Person();
    person2.setName("xx");
    person2.setAge(12);
    Map<String,Person> map=new HashMap<>();
    map.put("AA",person );
    map.put("BB",person1 );
    map.put("CC",person2 );
    map.forEach((k,v) ->{
        if(v.getName().equals("bb")){
            System.out.println(v.getAge());
        }
    });
}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值