Properties

加载defaults.properties文件

defaults.properties内容如下

    lastname=Smith

获取properties属性(defaults.properties文件和TestController文件置于同级目录)

    try (InputStream bundledResource = TestController.class.getResourceAsStream("defaults.properties")) {
Properties defaults = new Properties();
defaults.load(bundledResource);
return defaults;
} catch (IOException e) {
throw new UncheckedIOException( "defaults.properties not properly packaged" + " with application", e);
}

写Properties到xml文件

Properties prop = new Properties();
prop.setProperty("name", "Steve");
prop.setProperty("color", "green");
prop.setProperty("age", "23");
File file = new File("C:\\Users\\26401\\Desktop\\defaults.properties");
if (!file.exists()){
file.createNewFile();
}
prop.storeToXML(new FileOutputStream(file), "testing properties with xml"); <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>testing properties with xml</comment>
<entry key="color">green</entry>
<entry key="name">Steve</entry>
<entry key="age">23</entry>
</properties>

读Properties从xml文件

Properties prop = new Properties();
File file = new File("C:\\Users\\26401\\Desktop\\defaults.properties");
if (file.exists()){
prop.loadFromXML(new FileInputStream(file));
for (String name : prop.stringPropertyNames()){
System.out.println(name + "=" + prop.getProperty(name));
}
}else {
System.err.println("Error: No file found at: " + file);
}

Lambda表达式

自定义

Lambda表达式只能用于函数式接口

函数式接口只能包含一个抽象方法,可以有多个default和static方法,可以有多个重写对象的方法

@FunctionalInterface
interface MyFunctionalInterface {
void fn();
} MyFunctionalInterface mfi = () -> System.out.println("函数式接口");
mfi.fn(); 等价于 MyFunctionalInterface mfi = new MyFunctionalInterface() {
@Override
public void fn() {
System.out.println("函数式接口");
}
};

内置

Predicate<String> p = o -> o.isEmpty();            // 返回值类型必须是布尔值
Function<String, Boolean> f = o -> o.isEmpty(); // 返回值类型可以自定义
Consumer<String> c = o -> System.out.println(o); // 返回值类型为void
c.accept("没有返回值");

sort方法中使用Lambada

原始写法
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
Collections.sort(list, new Comparator<Integer>(){
public int compare(Integer b, Integer l){
return b.compareTo(l);
}
}); // [1,2,3] Lambada写法
Collections.sort(list, (b, l) -> b.compareTo(l)); 或者
Collections.sort(list, Comparator.comparing(Integer::valueOf));

序列化

文件序列化

public class SerialClass implements Serializable {
private static final long serialVersionUID = 1L;
}

Gson序列化

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency> public class User { private Integer id;
private String name; public User(Integer id, String name) {
this.id = id;
this.name = name;
} getter...
setter...
} // 序列化成json
User user = new User(1, "小李");
Gson gson = new Gson();
String json = gson.toJson(user);
// 反序列化
User userCopy = gson.fromJson(json, User.class);

Jackson序列化

依赖

    <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency> json字符串转对象 ObjectMapper objectMapper = new ObjectMapper();
User outputObject = objectMapper.readValue( "{\"id\":\"1\",\"name\":\"小叶\"}", User.class);
outputObject.getName(); @JsonIgnoreProperties(ignoreUnknown = true) // 忽视反序列化遇到的不认识的属性
public class User {
...
} 对象转字符串 User user = new User(1, "小李");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);

Comparable和Comparator

Comparable对象排序

public class User implements Comparable<User> {

    private Integer id;
private String name; public User(Integer id, String name) {
this.id = id;
this.name = name;
} public void setId(Integer id) {
this.id = id;
} public Integer getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} @Override
public boolean equals(Object o) {
if (! (o instanceof User)) return false;
User p = (User)o;
return id.equals(p.id) && name.equals(p.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@Override
public int compareTo(User other) {
int idCompare = id.compareTo(other.id);
if (idCompare != 0) {
return idCompare;
} else {
return id.compareTo(other.id);
}
}
} List<User> list = Arrays.asList(new User(2, "小李"), new User(3, "小李"), new User(1, "小李"));
Collections.sort(list);

Comparator对象排序

List<User> list = Arrays.asList(new User(2, "小李"), new User(3, "小张"), new User(1, "小王"));

Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return u1.getId().compareTo(u2.getId());
}
}); Collections.sort(list,(u1, u2) -> {
return u1.getId().compareTo(u2.getId());
}); Collections.sort(list,Comparator.comparing(User::getId).thenComparing(User::getName));

结语

本文章是java成神的系列文章之一

如果你想知道,但是本文没有的,请下方留言

我会第一时间总结出来并发布填充到本文

java成神之——properties,lambda表达式,序列化的更多相关文章

  1. java成神之——集合框架之ArrayList,Lists,Sets

    集合 集合种类 ArrayList 声明 增删改查元素 遍历几种方式 空集合 子集合 不可变集合 LinkedList Lists 排序 类型转换 取交集 移动元素 删除交集元素 Sets 集合特点 ...

  2. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

  3. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

  4. 转载_2016,Java成神初年

    原文地址:http://blog.csdn.net/chenssy/article/details/54017826 2016,Java成神初年.. -------------- 时间2016.12. ...

  5. Java成神路上之设计模式系列教程之一

    Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...

  6. java成神之——安全和密码

    安全和密码 加密算法 公钥和私钥加密解密 生成私钥和公钥 加密数据 解密数据 公钥私钥生成的不同算法 密钥签名 生成加密随机数 基本用法 指定算法 加密对象 SealedObject Signatur ...

  7. java成神之——网络编程基本操作

    网络编程 获取ip UDP程序示例 TCP程序 结语 网络编程 获取ip InetAddress id = InetAddress.getLocalHost(); // InetAddress id ...

  8. java成神之——MySQL Connector/J 的基本使用

    使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...

  9. java成神之——线程操作

    线程 Future CountDownLatch Multithreading synchronized Thread Producer-Consumer 获取线程状态 线程池 ThreadLocal ...

随机推荐

  1. Django进阶Model篇004 - ORM常用操作

    一.增加 create和save方法 实例: 1.增加一条作者记录 >>> from hello.models import * >>> Author.object ...

  2. ubuntu下搭建hadoop平台

    终于把单击模式跟伪分布式模式搭建起来了,记录于此. 1.SSH无密码验证配置 因为伪分布模式下DataNode和NameNode均是本身,所以必须配置SSH localhost的无密码验证. 第一步, ...

  3. windows server 2016 docker 之创建使用虚拟交换机

    windows server 2016 Create a virtual switch for Hyper-V virtual machines 操作步骤: 服务器只有一块网卡连接了网络 尝试1: h ...

  4. 条款2:尽量以const enum inline 来替换 #define

    这里说的意思其实相当于,宁可以用编译器来替换预处理器 因为使用预处理器可能使得被处理过的东西无法进入符号表,例如 #define MAXLEN 16 这里的MAXLEN并没有进入符号表,这样有编译错误 ...

  5. C++友元类实现

    C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元.当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员. 请看 ...

  6. Creating a Game with CocosBuilder

    Creating a Game with CocosBuilder This tutorial aims to show how you can use CocosBuilder together w ...

  7. 剑指offer-第四章解决面试题思路之总结

  8. js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)

    本文为大家详细介绍下使用js实现遮罩弹出层居中,且随浏览器窗口滚动条滚动,示例代码如下,感兴趣的朋友可以参考下, js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动) 下面看看我的原始代码: & ...

  9. IronPython之基本类型

    通过下图展现IronPython的基本类型,便于理解和记忆. 基本数据类型 数据类型 类型 示例 备注 Byte string str ‘hello’ “hello” “””hello””” ‘’’h ...

  10. 一周学会HTML----Day03常用标签(下)

    form 标签 表单(重要) 表单用途 用于收集用户信息,提交给服务器 基本使用 (action,method,enctype) 要提交的表单必须放到form里 input select textar ...