Java学习-之函数式编程

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Java学习-之函数式编程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Java学习-之函数式编程



引出

函数式编程理解之后使用起来还是比较方便的,一直用点.就可以


函数式编程—lamda表达式

@FunctionalInterface

出现在接口,则此接口可以使用lamda表达式

List<Older> ageList = list.stream() // 流对象
        .filter(older -> (30 < older.getAge() && older.getAge() < 80)) // 过滤条件
        .collect(Collectors.toList()); // 回收结果

排序

int格式排序

List<Older> sortByAge = list.stream()
        .sorted((o1, o2) -> o2.getAge() - o1.getAge()) // 降序
        .collect(Collectors.toList());

BigDecimal排序

List<Food> sorted = list.stream()
        .sorted((o1, o2) -> o1.getPrice().compareTo(o2.getPrice())) // 升序
        .collect(Collectors.toList());

Date类型排序

List<Food> sorted = list.stream()
        .sorted((o1, o2) -> o1.getProductionDate().compareTo(o2.getProductionDate()))
        .collect(Collectors.toList());
Collections.sort(list, (o1, o2) -> o1.getProductionDate().compareTo(o2.getProductionDate()));

limit:限制数量

需求:找出年龄最低的5个

List<Older> limitTwo2 = list.stream()
        .sorted((o1, o2) -> o2.getAge()-o1.getAge())
        .limit(2) // 放在排序后面,限制数量
        .collect(Collectors.toList());
List<Older> sortByAge = list.stream()
.sorted((o1, o2) -> o2.getAge() - o1.getAge())
.collect(Collectors.toList());
System.out.println("找出年龄最大的2个人"); // subList 方法
System.out.println(sortByAge.subList(0, 2));

最大最小

需要用get()获取

System.out.println("最大值"+
                   list.stream()
                   .max((o1, o2) -> o1.getAge()-o2.getAge())
                   .get()); // 需要用get()方法回收

filter:过滤

找到所有的偶数

List<Integer> numbers = Arrays.asList(1,2,3,4,5,9,6,43,3);
List<Integer> newNum = numbers.stream()
        .filter(integer -> integer % 2 == 0)
        .collect(Collectors.toList());
System.out.println(newNum);

distinct:去重

StringBuilder去重

List<StringBuilder> allChildJob = list.stream()
    .map(o -> o.getChildJob()) // map 获得某个属性值
    .collect(Collectors.toList());
List<String> result = allChildJob.stream()
    .map(StringBuilder::toString) // map 将StringBuilder变成String
    .distinct() // 进行去重
    .collect(Collectors.toList());

求和

int类型求和

// 把所有年龄找出来求和,计算平均值
System.out.println(list.stream()
                   .mapToInt(older->older.getAge()) // 获取年龄
                   .sum());

BigDecimal求和

list.stream()
    .map(older -> older.getSal())
    .reduce(BigDecimal.ZERO,BigDecimal::add) // 用reduce求和

综合应用

模糊查询

  • 模糊查询名字、简介中含有的某个输入信息,如输入“玫瑰”,查找出名字或简介中含有“玫瑰”的美食。
@Override
public List<Food> findKeywordInNameDesc(String keyWord) {
    List<Food> find = list.stream()
        .filter(food -> food.getName().contains(keyWord) || food.getDesc().indexOf(keyWord)!=-1) // 这里的food.getDesc()获得是StringBuilder
        .collect(Collectors.toList());
    return find;
}

综合查询

  • 综合查询输入工厂,味道,成分,价格在某个范围之内的美食。
// 取交集
System.out.println("综合查询,工厂,味道,成分,价格");
List<Food> intersection = new ArrayList<>(findFactory);
intersection.retainAll(findPrice);
intersection.retainAll(findIngredient);
intersection.retainAll(findTaste);
// 根据工厂名查询
List<Food> find = list.stream().filter(food -> food.getFactory().equals(factory)).collect(Collectors.toList());
// BigDecimal类型的查询
@Override
public List<Food> findByPrice(String max, String min) {
    // 查询价格在某个区间的美食
    // max,min为null或空异常
    if (Objects.isNull(max) || Objects.isNull(min) || "".equals(max) || "".equals(min)){
        throw new NullOrNoInputException("401异常,输入max或min为空");
    }
    // max小于min异常
    if((new BigDecimal(min)).compareTo(new BigDecimal(max))>0){
        throw new ErrorInputException("402异常,输入的max比min小");
    }
    List<Food> find = list.stream()
            .filter(food -> food.getPrice().compareTo(new BigDecimal(min))>0
                    && food.getPrice().compareTo(new BigDecimal(max))<0)
            .collect(Collectors.toList());
    return find;
}

总结

1.list.stream(),collect(Collectors.toList());
2.limit,sort,filter;
3.distinct,reduce;
4.函数式编程,lamda表达式;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/165172.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!