Java小知识

一、lambda

()->{}
()中为接口唯一方法中的参数,可以任意取
{}为接口唯一方法中的执行语句,返回的结果类型必须符合接口中方法返回值的定义

原理理解:
Public interface Printable{
String print(String suffix);}

在函数式编程中有一个方法来找到这个字符串(前提是接口中只有一个抽象方法,称为泛函),即一个注解(@Functionallnterace),在通常情况下在调用时如果接口满足泛函,即使不显示的标识这个汪解,也会发挥作用;但如果我们在编与一个接口时显示标注此汪解,那么在定义超过一个抽象方法时,编辑器会报错

static void printThing (Printable thing){
thing print();}

理解:当我们通过printThin()方法去调用实现了Printable的类的print方法时,需要先定义一个实现了Printable 的类,重写print方法,然后new出这个类,传入printThing()方法中,从而获取结果优化:使用lambda允许我们直接传递一个方法的实现作为可打印参数

使用实例:
// 代码作为参数,直接传递具体实现
Printable lambdaPrintable = (s)> “MEOW” +s;
printThing(lambdaPrintable);

二、future

将任务提交给future去异步处理,然后获取结果
boolean.isDone()提供方法查询任务的执行情况
V.get()等待任务执行结束,然后获取结果

三、stream

1、什么是stream流:

类似一个迭代器,只能遍历一次,在流的过程中对元素执行操作,如过滤或者符合某个条件

2、数据源(数組成集合)

每次操作后返回一个新的流对象,方便进行链式操作,但原有的流对象不变

3、创建流

.stream()

4、操作流:

4.1过滤

.filte()
将流中的元素作为lambda表达式中的参数,执行箭头后的逻辑
例如:

list.stream().filter/element->element.cantains("王"));

就会得到包含王的元素数组的流

4.2映射

将流中的元素转化为新的流中的元素
.map()
例如:

list.stream().map(String:length);

得到流中元素的个数的数组的流

5、转换流

.collect()
例如:

list.stream().map(String:length).collect(Collectors.tolist();

得到一个新的个数的list

6、流转map时键冲突处理

Map<String,MultipleClientNoMap>multiMap=multipleClientNoMaps.stream().collect(Collectors.toMap(m1-> m1.getCurrClientNo(),m2->m2,(v1,v2)->v2));

理解:
m1-> m1.getCurrClientNo()作为map的键
m2->m2作为map的值
(v1,v2)->v2:键冲突时保留原始的值

7、.findAny()

.findAny()
.orElse(StringUtils.EMPTY);
理解:
.findAny()用于查找任意一个元素井返回optional对象
如果流为空,则返回一个空optional对象
15-20230609
.orElse(StringUtils.EMPTY);用于获取Optional对象中的值,如果optional对象为空,则返回指定的默认值,这里返回一个空宇符串""

8、.groupingby()

根据属性进行分组
Java小知识_第1张图片
结合filter从分组结果中排除某些条目
Java小知识_第2张图片
配合mapping
Java小知识_第3张图片

四、Object…

可变个数的形参,允许一切继承Object的对象作为参数

五、indexOf()

indexOf(string str):返回指定字符str在字符串中(方法调用者) 第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回-1。

indexOf(string str, int index):返回从 index 位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回-1。

使用实例:

historyCoverage.getFullName.indexOf("安全")<0;

表示不包含“安全”这个司

六、SQL

6.1 count函数

用法:

# 查询符合条件的某列一共有多少行数据
select count(列名)from 表名 where 列名=#{字段名};
# 查询某表的总行数
select count(*) from 表名;
# 查询某列不同值的数目(相同的记为一个)
select count(distinct 列名)from 表名;

使用案例:

<select id="getSigniClaimRecord" parameterType="String" resultType="integer">
    select count('Y') from event_info el
    where exists (
        select 1 from claim_apply_cause cac
        where cac.claim_cause = '09' and cac.register_no = e1.regsno
    )
    and e1.case_state in ('10', '13', '14')
    and el.clientno = #{clientNo, jdbcType=VARCHAR}
</select>

count(‘Y’),表示统计满足条件的行数,但是并不关心具体的列或字段。'Y’是一个任意的字符串常量,作为参数传递给COUNT函数,它的实际值并不影响计数的结果。

6.2 select 1

select 1 from 表示如果返回结果为空,则表示条件不满足;如果返回结果为1,则表示条件满足。

七、 final类型的属性值可以改吗

final 修饰的引用类型属性本身是不可改变的,但是它所引用的对象的状态可以改变。

八 、bitset

使用位来存储Boolean信息,0表示假,1表示真
用法:

九、Optional.ofNullable()

作用:解决空值判断问题,避免空值(null)显示判断,避免空值导致的空指针问题

//if判断:判断好多层
	int count1 = 1;
	if(testDemo != null){
		if(testDemo.getCount() != null){
			count1 = testDemo.getCount();
		}
	}
	System.out.println(count1);
	
	//三目运算符:嵌套层数深,可读性不好
	int count2 = testDemo != null ? (testDemo.getCount() != null ? testDemo.getCount() : 1) : 1;
	System.out.println(count2);
	
	//Java8-Optional:优雅,可读性较好
	int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElse(1);
	System.out.println(count3);

你可能感兴趣的:(理解录,java,开发语言)