首页 > 编程语言 >java函数式编程

java函数式编程

时间:2022-10-12 11:55:05浏览次数:47  
标签:缓存 java 函数 编程 list Person static new String

import com.alibaba.fastjson.JSON;
import com.ctrip.car.osd.util.LogHelper;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

public class CacheHelper {
    private static final int EXPIREDSECOND = 60 * 10;//10 MINUTES
     /**
     * 
     * @param key 缓存key
     * @param supplier 需缓存结果的方法
     * @param classz 缓存数据的类型
     * @param <T>
     * @return
     */
    public static <T> List<T> getOrSetData(String key, Supplier<List<T>> supplier, Class classz) {
        List<T> list;
        try {
            //修改成自己的缓存实现
            //存在缓存则使用fastjson对缓存中的数据进行转换
            if (RedisManager.exists(key)) {
                list = JSON.parseArray(RedisManager.get(key), classz);
            } else {
                //不存在缓存的则调用supplier,并且将结果存入缓存
                list = supplier.get();
                if (CollectionUtils.isNotEmpty(list)) {
                    RedisManager.set(key, JSON.toJSONString(list), EXPIREDSECOND);
                }
            }
        } catch (Exception ex) {
            LogHelper.error("CacheHelper.getOrSetData", ex);
            list = new ArrayList<>();
        }
        return list;
    }
}

List<DataType> allList = CacheHelper.getOrSetData(CACHE_KEY, () -> getAllData(), Advertisement.class);

 List<Person> lisiList = new ArrayList<>();
        Consumer <Person> consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };

        consumer = consumer.andThen(
           x -> lisiList.removeIf(y -> y.age < 23)
        );

        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));
/**
     * 1. 必须为女生; 
     * 2. 姓名为4个字。
     */
    public static void main(String[] args) {
        String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男", "赵丽颖,女" };
        getFemaleAndname((s) -> s.split("\\,")[0].length() == 4, 
                (s) -> s.split("\\,")[1].equals("女"), array);
    }
    private static void getFemaleAndname(Predicate<String> one,
            Predicate<String> two, String[] arr) {
        for (String string : arr) {
            if (one.and(two).test(string)) {
                System.out.println(string);
            }
        }
    }
public class CheckUtils {
    private static final Function<String, String> lengthCheck = params -> {
        if (params.length() > 100) {
            throw new RuntimeException("Length exceed max limit.");
        }
        return params;
    };

    private static final Function<String, String> invalidCharacterCheck = str -> {
        if (!str.matches("^[a-f,A-F]$")) {
            throw new RuntimeException("Contains invalid character.");
        }
        return str;
    };
    
    /**
     * 这里的公共方法组合了该类中的基本校验逻辑构成一个复合的逻辑
     */
    public static void checkStringLengthAndPhoneNumber(String string) {
        invalidCharacterCheck.compose(lengthCheck).apply(string);
    }
}

 

标签:缓存,java,函数,编程,list,Person,static,new,String
From: https://www.cnblogs.com/goPush/p/16784043.html

相关文章

  • JAVA反射Runtime类研究
    Runtime类在java中一般类的调用方法是new类();所以我们使用newRuntime()来实例化一个Runtime类的对象importjava.io.IOException;publicclassmain{public......
  • 关于Java中length、length()、size()的区别
    以前总是觉得自己好像会了,但是某天忽然面对这个笔试题还是会恍惚一下,混淆和答错的几率也很大,不知道有没有其他人像我一样的。所以今天把这个问题记一下,希望印象更深刻。......
  • DQL_排序查询和DQL_聚合函数
    DQL_排序查询:语法:orderby子句orderby排序字段1排序方式1,排序字段2排序方式2...排序方式∶ASC:升序,默认的。DESC:降序。注意∶如果有多个排序条件,则当前边的条件......
  • Win11操作系统,在使用电脑远程桌面的过程中出现“出现身份验证错误,要求的函数不受支持
    https://blog.csdn.net/wwwwestcn/article/details/122681555https://wenku.baidu.com/view/cd3e96872b4ac850ad02de80d4d8d15abf23004e.html按照常见的修改组策略后并没......
  • WebAssembly01--在JavaScript中读写C/C++内存
    编译选项emccmem.cc-omem.jsmem.cc#include"util.h"intg_int=42;doubleg_double=3.1415926;EM_PORT_API(int*)get_int_ptr(){return&g_int;}EM_PO......
  • java 实现接口频次限制
    1、添加依赖<dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.10</versio......
  • Java控制台简易计算器(两数运算)
    Java控制台简易计算器(两数运算)源代码使用while循环,Scanner方法,Switch语句实现交互效果packagecom.ge.method;importjava.util.Scanner;publicclassDemo04{......
  • java笔记
    代码规范命名规范项目名:见名知意,英文,小写包名:公司反域名;小写类名:见名知意,驼峰原则,不能有特殊符号,支持_,数字不能放开头类名如果有多个单词,每个单词大......
  • 函数作为参数传递、lambda函数
    函数作为参数传递1.函数本身是可以作为参数,传入另一个函数中进行使用的。2.将函数传入的作用在于:传入计算逻辑,而非传入数据。代码案例#定义一个函数,接收另一个......
  • 2020年2月编程语言排行榜
    TIOBE公布了2月份编程语言排行榜。相比上个月编程语言Top5并没有太大的变化,其中Java依旧稳坐榜首,随后分别是C、Python、C++、C#。Java,C和Python。牢牢占据前三的位置对于......