kelovp.
首页 Java Java8 的lambda表达式和LomBok/JSON

Java8 的lambda表达式和LomBok/JSON

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

    由于我来的比较巧,正好公司从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 city;

text
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 lists;

text
//这里我使用@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 {

text
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。

K
kelovp
后端工程师 · 广告投放 / 商业化
八年后端,做广告投放与商业化变现系统,现在带团队折腾商业化中台与 AIGC 内容平台。工作之外写点电子音乐、动漫解析和故事。相信把事情想清楚,才写得明白。