常用lambda表达式

package othertest;

import org.junit.Before;
import org.junit.Test;
import org.springframework.test.context.TestPropertySource;

import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * Created by me on 2017/8/31.
 */
public class LambdaTest {

    private List<Person> dataList = null;

    private Map<String, Person> map = null;

    @Before
    public void init() {
        dataList = new ArrayList<Person>() {
            {
                add(new Person("tan1", 27));
                add(new Person("jian2", 26));
                add(new Person("wang3", 25));
                add(new Person("tan1", 28));
            }
        };
        map = new HashMap<String, Person>() {
            {
                put("1", new Person("tan1", 27));
                put("2", new Person("jian2", 26));
                put("3", new Person("wang3", 25));
            }
        };
    }

    @Test
    public void test1() {
        //循环遍历
        //dataList.forEach(p -> System.out.println(p.getName()));
        dataList.forEach(p -> {
            if (p.getAge() > 26) {
                System.out.println(p.getName());
            }
        });
    }

    /**
     * map函数操作:将一个对象变为另一个对象,并返回该值
     */
    @Test
    public void test2() {
        //1.map处理:将一个对象变为另一个对象,并返回该值,获取所有年龄
        List<Integer> ages = dataList.stream().map(Person::getAge).collect(Collectors.toList());
        System.out.println(ages);

        //2.map处理,年龄+1
        List<Person> persons = dataList.stream().map(p -> {
            return new Person(p.getName(), p.getAge() + 1);
        }).collect(Collectors.toList());
        System.out.println(persons.toString());

        //3.filter处理,给一个过滤条件,过滤掉数据
        Predicate<Person> predicate = p -> p.getAge() > 26;//只处理年龄大于26的,对年龄大于26的+1
        List<Person> persons2 = dataList.stream().filter(predicate).map(p -> {
            return new Person(p.getName(), p.getAge() + 1);
        }).collect(Collectors.toList());
        System.out.println(persons2.toString());
    }

    /**
     * reduce函数操作: 将所有值通过计算合并为一个
     */
    @Test
    public void test3() {
        //1.利用reduce排序取出最大年龄的
        Person p1 = dataList.stream().reduce((a, b) -> {
            if (a.getAge() > b.getAge()) {
                return a;
            }
            return b;
        }).get();
        System.out.println(p1);
        //2.利用reduce计算年龄和
        int result = dataList.stream().mapToInt(p -> p.getAge()).reduce((a, b) -> a + b).getAsInt();
        System.out.println(result);
        //3.利用reduce求平均
        double age = dataList.stream().mapToInt(p -> p.getAge()).average().getAsDouble();
        System.out.println(age);
    }

    /**
     * sorted排序
     */
    @Test
    public void test4() {
        dataList = dataList.stream().sorted((a, b) ->  b.getAge() - a.getAge()).collect(Collectors.toList()); //年龄大的在前,调整a,b顺序
        System.out.println(dataList);
    }

    /**
     * java map遍历
     */
    @Test
    public void test5() {
        map.keySet().stream().forEach(k -> System.out.println(map.get(k)));
        System.out.println("-------------------------------------------");
        map.entrySet().stream().forEach(p -> System.out.println(p.getKey() + ":" + p.getValue()));
    }

    /**
     * list转map:拿出name当key,并把相同key的值放入同一个list中
     */
    @Test
    public void test6() {
        Map<Object, List<Person>> map = dataList.stream().collect(Collectors.groupingBy(p -> p.getName()));
        map.keySet().stream().forEach(p -> System.out.println(p + ";" + map.get(p)));
    }

    /**
     * list转map,拿出name当key,相同key用后一个值覆盖前一个值
     */
    @Test
    public void test7() {
        Map<String, Person> map = dataList.stream().collect(Collectors.toMap(p -> p.getName(), Function.identity(), (k1, k2) -> k2, LinkedHashMap::new));
        System.out.println(map);
    }

    /**
     * 判断相同属性的出现了多少次
     */
    @Test
    public void test8() {
        Map<String, Long> map = dataList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.counting()));
        System.out.println(map);

        List<String> list2 = new ArrayList<String>() {
            {
                add("111");
                add("111");
                add("222");
                add("333");
                add("222");
            }
        };
        Map<String, Long> map2 = list2.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        System.out.println(map2);
    }



}

class Person {
    private String name;

    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值