Java8 的lambda表达式和LomBok/JSON

/ 0评 / 7

    事情是这样的-- 这不入职刚进来。然后得换编译环境了。于是就出现了接下来的事情。

    由于我来的比较巧,正好公司从SVN转GitLab,然后刚从SVN checkout下代码后就被告知要转(但是和我没什么关系)然后我inport所有代码到eclipse之后发现XD这个java代码不清真。中间很多list的迭代 以及异常的写法很是离奇(年轻的农村人没见过世面,Java8推出四年竟然不知道新特性!)所以问了下我的团队大当家,他告诉我这个是lambda表达式,Java8的新特性。于是为了能够读懂源码我开始了:

    首先在其他地方有个特别详细的博客:

    http://www.importnew.com/16436.html

    结合公司的例子,也大概明白了是怎么回事。而公司里更多用来forEach迭代。

    这里有更详细描述迭代:http://blog.csdn.net/renfufei/article/details/24600507

    而继此之后继续推进发现bean层的entriy很多都没有提供get/set方法,但是在其他地方装配类的时候依旧可以使用set方法。xd,然后自己经过一番研究才发现是插件。

lombok

    安装:https://projectlombok.org/

    下载好后双击安装 一路无脑确定,然后在使用的时候注意一下几点:

package com.hbc.test;

import java.util.Arrays;
import java.util.List;

import lombok.Data;

import org.junit.Test;

@Data
public class Testclass {
	private int no;
	private String name;
	private List<String> city;
	
	
	public String toString(){
		return "{\""+no+"\":\""+name+"\",\"from\":"+city+"}";
	}
	@Test
	public void Testfor() {
		try {
			Testclass a1 = new Testclass();
			List<String> list = Arrays.asList("Beijing","Shanghai","Lanzhou","HangZhou");
			System.out.println(list);
			
			a1.setCity(list);
			a1.setNo(1);
			a1.setName("Test1");
			System.out.println(a1.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

    这里有一个注解@Data 而以下是有关注解的详细解释:

    http://blog.csdn.net/sunsfan/article/details/53542374

    然后就是json了。之前Python是做了不少相关的东西,后来在Git上看到一个好玩的东西:fastJSON 创于星星第三大的集团阿里(第一谷歌 第二fb 第三阿里 科科)

    接下没多说的:测试类 一看都懂 注意下注解就行

User.java
import lombok.Data;

@Data
public class User {
	private Integer id;
	private String name;
	private Integer age;
}
Group.java
import java.util.List;

import com.alibaba.fastjson.annotation.JSONField;

import lombok.Data;

@Data
public class Group {
	@JSONField(name = "no",ordinal = 1)
	private Integer id;
	private String message;
	@JSONField(name = "users",ordinal = 3)
	private List<User> lists;
	
	//这里我使用@Data注解装配了Get/Set,但是为了使用JSONFiled--:
	//可以通过注释注解来明白JSONField的作用
	//这里也可使用serialize/deserialize指定字段不序列化 eg:
	//@JSONField(serialize = false)
	//使用ordinal指定字段的顺序
	@JSONField(name = "FileMessageStatus",ordinal = 2)
	public String getMessage(){
		return message;
	}
}
import java.util.Arrays;
import java.util.List;

import org.junit.FixMethodOrder;
import org.junit.Test;

import org.junit.runners.MethodSorters;

import com.alibaba.fastjson.*;

@SuppressWarnings("all")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestFastJson {

	private static String jsonString;

	@Test
	public void ToJson() {
		Group tk = new Group();
		tk.setId(1);
		tk.setMessage("ok");

		User us = new User();
		User us1 = new User();
		User us2 = new User();
		us.setId(1);
		us.setName("Vicetone");
		us.setAge(19);

		us1.setId(2);
		us1.setName("Zedd");
		us1.setAge(22);

		us2.setId(3);
		us2.setName("R3hard");
		us2.setAge(55);

		List<User> list = Arrays.asList(us, us1, us2);
		tk.setLists(list);
		// 序列化
		String jsonString = JSON.toJSONString(tk);
		System.out.println(jsonString);
		this.jsonString = jsonString;
	}

	@Test
	public void ToObject() {
		String jsonString = this.jsonString;

		// 反序列化
		try {
			Group tk = JSON.parseObject(jsonString, Group.class);
			System.out.println(tk.getLists());
		} catch (NullPointerException e) {
			e.printStackTrace();
		}

		// 注意注解:https://github.com/alibaba/fastjson/wiki/JSONField
	}
}

    相关的简单就这么多 - 难的部分正在啃 搞定会写log。


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注