目前看到的有两种方式:
- 根据文件后缀
- 根据文件魔数
根据文件后缀
满足一般需要,但如果文件后缀被手工修改,则可能判断错误。
JDK中已经提供了现成的接口用于根据文件名判断: Continue reading »
目前看到的有两种方式:
满足一般需要,但如果文件后缀被手工修改,则可能判断错误。
JDK中已经提供了现成的接口用于根据文件名判断: Continue reading »
代码取自:JAVA根据URL网址获取输入流
/**
* 根据地址获得数据的输入流
* @param strUrl 网络连接地址
* @return url的输入流
*/
public static InputStream getInputStreamByUrl(String strUrl){
HttpURLConnection conn = null;
try {
URL url = new URL(strUrl);
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(20 * 1000);
final ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(conn.getInputStream(),output);
return new ByteArrayInputStream(output.toByteArray());
} catch (Exception e) {
logger.error(e+"");
}finally {
try{
if (conn != null) {
conn.disconnect();
}
}catch (Exception e){
logger.error(e+"");
}
}
return null;
}
如若想下载文件,则可以在上面方法基础上,进一步封装即可:
Continue reading »
<where>
<trim suffixOverrides="," >
<if test="id != null and id != ''" >
and id = #{id}
</if>
<if test="name != null and name != ''" >
and name like concat('%',#{name},'%')
</if>
</trim>
</where>
假设查询person表,参数类型为XXXVo,XXXVo中包含一个List对象,保存了状态列表,此时可以参考如下查询
<select id="queryXXX" parameterType="XXXVo"
resultMap="XXXResult">
select *
from person
WHERE 1=1
<if test="statusFilter != null and statusFilter.size() > 0">
and status in
<foreach collection="statusFilter" item="statusId" index="i" open="(" close=")" separator=",">
#{statusId}
</foreach>
</if>
ORDER BY DEPTID
</select>
google guava使用教程系列(3)- 前置条件检查
原文地址:[https://github.com/google/guava/wiki/PreconditionsExplained])(https://github.com/google/guava/wiki/PreconditionsExplained)
简而言之,guava提供了一系列检查参数的方案,个人感觉一般,实际业务场景中对于参数判断自己写可能比这种封装更方便。
官方举的例子:
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
checkArgument(i < j, "Expected i < j, but %s >= %s", i, j);
大致有如下几类:
http://ifeve.com/google-guava-preconditions/有翻译,但翻译不全,建议github上的原版wiki。看名字基本能猜到方法用途,看个人喜好吧,我个人倒是更喜欢apache commons里的校验方法,比如StringUtils.isEmpty()
在jdk 1.5以后,优化了,使其性能并不是像很多帖子说的那样,“非常重”
方法 | 说明 |
---|---|
lock() | 获取锁,如果锁被暂用则一直等待 |
tryLock() | 如果获取锁的时候锁被占用就返回false,否则返回true |
tryLock(long time, TimeUnit unit) | 比起tryLock,多出等待时间 |
unLock() | |
lockInterruptibly() |
本文仅展示总体配置,具体注解用法请另行搜索、查询。
</pre> <pre><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations --> <dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-annotations</artifactId> <version>2.0.8</version> </dependency> <!-- http://localhost:18004/doc.html --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.8.8</version> </dependency> <!-- Swagger用了高版本的 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency></pre> <pre>
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lu930124/article/details/77595585
利用java8新特性,可以用简洁高效的代码来实现一些数据处理。
定义1个Apple对象:
public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) { this.id = id; this.name = name; this.money = money; this.num = num; } }
不要在Set中使用null,或者把null作为map的键值。使用特殊值代表null会让查找操作的语义更清晰。
如果你想把null作为map中某条目的值,更好的办法是 不把这一条目放到map中,而是单独维护一个”值为null的键集合” (null keys)。Map 中对应某个键的值是null,和map中没有对应某个键的值,是非常容易混淆的两种情况。因此,最好把值为null的键分离开,并且仔细想想,null值的键在你的项目中到底表达了什么语义。
如果你需要在列表中使用null,并且这个列表的数据是稀疏的,使用Map<Integer, E>可能会更高效,并且更准确地符合你的潜在需求。
此外,考虑一下使用自然的null对象——特殊值。举例来说,为某个enum类型增加特殊的枚举值表示null,比如java.math.RoundingMode就定义了一个枚举值UNNECESSARY,它表示一种不做任何舍入操作的模式,用这种模式做舍入操作会直接抛出异常。
如果你真的需要使用null值,但是null值不能和Guava中的集合实现一起工作,你只能选择其他实现。比如,用JDK中的Collections.unmodifiableList替代Guava的ImmutableList
大多数情况下,开发人员使用null表明的是某种缺失情形:可能是已经有一个默认值,或没有值,或找不到值。例如,Map.get返回null就表示找不到给定键对应的值。
Continue reading »
注意:本文档基于google guava 28 wiki
连接器
Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");
返回Harry; Ron; Hermione
skipNulls()方法是直接忽略null,使用useForNull(String)方法可以给定某个字符串来替换null,即
Joiner joiner = Joiner.on("; ").useForNull("替换字符串");