2019/12/23
1.关于redis可以存储的基本数据类型。
1.1.String:最基本的类型,可以包含特殊字符,二进制安全
1.2.Hash:可以用于存储对象,一个key可以包含多个属性,例如hmset user age 15 sex man
1.3.List:可以作为队列,也可以作为栈
把左侧定义为头部,右侧定义为尾部
lpush方法:从头部添加元素(栈),先进后出
rpush方法:从尾部添加元素(队列),先进先出
1.4.set:无需不重复的存储键值对
1.5.zset,有序的存储键值对
lambda表达式:关于这一块的事我最熟练的可能就是list的foreach方法。但是后来又了解到jre1.8之后有4个lambda相关的接口,让代码更加的函数化。我感觉挺好的,不过我不太清楚应用场景,先放这,用上了好找。
4个接口函数Function,断言Predicate,生产者Supplier,消费者Consumer
public class TestMain {
public static void main(String[] args) {
//Predicate<T> 断言型接口:
List<String> list = Arrays.asList("Hello","No","U","Nigger","Fuck","Lambda","WWW");
filterStr(list, a->a.contains("o")).forEach(e->System.out.println(e));
//Function<T, R> 函数型接口:
System.out.println("?????"+strHandler(" ni shuo 看看 还行 ", f->f.replaceAll(" ", "")));
//Supplier<T> 供给型接口
List<Integer> l = getNumber(6, ()->(int)(Math.random()*100));
l.forEach(e->System.out.println(e));
//Consumer<T> 消费型接口
happy(10000, a->System.out.println("还可以吧"+a));
}
//断言
public static List<String> filterStr(List<String> list, Predicate<String> pre) {
List<String> resultList = new ArrayList<String>();
list.forEach(
a->{
if(!pre.test(a)) {
resultList.add(a);
}
}
);
return resultList;
}
//函数
public static String strHandler(String str, Function<String, String> fun) {
return fun.apply(str);
}
//生产者
public static List<Integer> getNumber(int num, Supplier<Integer> sup){
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < num; i ++) {
list.add(sup.get());
}
return list;
}
//消费者
public static void happy(double money, Consumer<Double> con) {
con.accept(money);
}
}