效率
先来个 Apache Commons 里面没有的
xiaozi/java-helpers
/*
[
{id: 1, name: "name1", gender: 1},
{id: 2, name: "name2", gender: 1},
{id: 3, name: "name1", gender: 2},
]
*/
/*
[1, 2]
*/
CollectionUtils.pluck(persons, "id", new ArrayList<Integer>())
/*
{
1: [
{id: 1, name: "name1", gender: 1},
{id: 2, name: "name2", gender: 1},
],
2: [
{id: 3, name: "name1", gender: 2},
]
}
*/
CollectionUtils.groupBy(persons, "gender", Integer.class)
/*
去重
*/
CollectionUtils.unique(integers, new ArrayList<Integer>())
Apache Commons 里面的
StringUtils
StringUtils.html
StringUtils.isEmpty(); // null 和 空字符串
StringUtils.isBlank(); // null 和 空字符串 和 全空白字符串
StringUtils.trim(); // 截取掉字符串两侧的空格
StringUtils.strip(); // 截取掉字符串两侧的空白字符串
StringUtils.equalsIgnoreCase(); // 忽略大小写的比较
StringUtils.indexOf(); // 字符/字符串在指定字符串中第一次出现的位置
StringUtils.indexOfIgnoreCase();
StringUtils.lastIndexOf();
StringUtils.contains(); // 是否包含子符串
StringUtils.left();
StringUtils.right();
StringUtils.mid(); // 截取字符串
StringUtils.split(); // 分割字符串
StringUtils.join(); // join数组为字符串
StringUtils.repeat(); // 重复输出字符串
StringUtils.leftPad();
StringUtils.rightPad(); // 填充字符串
StringUtils.lowerCase();
StringUtils.upperCase();
StringUtils.capitalize(); // 大写首字母
StringUtils.reverse(); // 倒转字符串
额,大多数提供的都跟PHP里面一样
CollectionUtils
CollectionUtils.html
CollectionUtils.union(); // 并集
CollectionUtils.intersection(); // 交集
CollectionUtils.containsAny(); // 是否存在交集
CollectionUtils.disjunction(); // 交集的补集
CollectionUtils.subtract(); // 差集
CollectionUtils.filter(); // 过滤
空List的返回
// new ArrayList<>();
Collections.emptyList();
片段
检测端口可用,(绑定,并关掉),来自 Canal
public static boolean isAvailablePort(int port) {
ServerSocket ss = null;
try {
ss = new ServerSocket(port);
ss.bind(null);
return true;
} catch (IOException e) {
return false;
} finally {
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
}
}
}
}
利用字符串标记,优雅解决内外配置文件的加载
// ...
private static final String CLASSPATH_URL_PREFIX = "classpath:";
// ...
String conf = System.getProperty("canal.conf", "classpath:canal.properties");
Properties properties = new Properties();
if (conf.startsWith(CLASSPATH_URL_PREFIX)) {
conf = StringUtils.substringAfter(conf, CLASSPATH_URL_PREFIX);
properties.load(CanalLauncher.class.getClassLoader().getResourceAsStream(conf));
} else {
properties.load(new FileInputStream(conf));
}