Java基础知识二

标签: Java 分类: Java 创建时间:2019-10-31 09:24:06 更新时间:2024-11-15 10:49:43

1.出现org.omg.CORBA.portable错误

我本地开发使用的是java8,远程服务器使用的是openjdk11,在maven打包的时候,出现了一个奇怪的问题

刚开始觉得莫名其妙,后来打开GlobalExceptionHandler类一看,原来引入了org.omg.CORBA.portable.ResponseHandler,虽然最后没有用上,但是还是影响了编译。

把这个去掉就可以了。

2.java中List遍历删除元素

1
2
3
4
5
6
 Iterator<RealTime> iterator = result.iterator();
while (iterator.hasNext()) {
if(resultSet!=null&&resultSet.next()){
iterator.remove();
}
}

3.Double数相加

两个double类型的数相加,比如0.1+0.1,本来应该等于0.2,但是使用double类型的值进行相加,最后可能得到的是0.200001这种,并不是我想要的。

加完之后返回到前台

这里的28345.827999999998,很明显后面的位数都是无效的。
解决方法是使用BigDecimal进行相加(使用这个会不会带来性能的影响呢?)

1
2
3
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();

4.BigDecimal类型

1
2
3
4
5
6
BigDecimal b1 = new BigDecimal(v1);   
BigDecimal b2 = new BigDecimal(v2);
b1.add(b2); //加
b1.subtract(b2); //减
b1.divide(b2); //除
b1.multiply(b2); // 乘

5.取出list集合中的某一列属性

需求就是,我的list是一个实体类的集合,如何快速获取到这个集合中所有id号的集合呢?

1
2
// 类User有一个getId方法
List<String> id_list=list.stream().map(User::getId).collect(Collectors.toList());

6.StringBuilder删除最后一个字符

1
2
3
4
5
StringBuilder sqlbuilder=new StringBuilder();
// 方法一
sqlbuilder.setLength(result.length()-1);
// 方法二
sqlbuilder.deleteCharAt(sqlbuilder.length()-1);

7.利用反射获取对象的全部属性值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Utils {
private final static Logger logger= LoggerFactory.getLogger(Utils.class);
public static String showAllProperty(RealTime realTime){
StringBuilder result=new StringBuilder();
try {
//使用反射技术完成对象属性的输出
Class<?> c = null;
c = Class.forName("com.bibichuan.bigdata.Entity.RealTime");
Field [] fields = c.getDeclaredFields();

for(Field f:fields){
f.setAccessible(true);
}
//输出p1的所有属性
for(Field f:fields){
Object property=f.get(realTime);
String type=f.getType().getName();
if(property==null){
property="";
}
if(f.getName().equals("RecordTime")){
String t=property.toString();
int i=t.indexOf(".");
property=t.substring(0,i>0?i:t.length());
}
if(type.equals("java.lang.String")){
property="'"+property+"'";
}
result.append(property+",");
}
if(result.length()>0){
result.setLength(result.length()-1);
}
}catch (Exception e){
logger.error("showAllProperty",e);
}
return result.toString();
}
}

8.Variable used in lambda expression should be final or effectively final

在idea中的stream().foreach中试图改变外部变量的值的时候,会出现这个错误。

怎么办,别用啊。

8.本地lib文件

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。