文档章节

guava 集合在实体类中的应用示例

youway
 youway
发布于 2014/10/17 16:01
字数 644
阅读 556
收藏 6


实体基类BaseEntity

package com.mytest;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class BaseEntity {
	private Long id;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	/**
	 * 覆盖toString方法,目的显示所有JavaBean的属性值,省略写很多的getXxx的方法
	 */
	public String toString() {
		return ToStringBuilder.reflectionToString(this,
				ToStringStyle.MULTI_LINE_STYLE);
	}
}

实体类Person

package com.mytest;


public class Person extends BaseEntity{
	
	private String name;
	private String gender;
	private int age;
	private double weight;
	
	public Person(Long id, String name, String gender, int age, double weight) {
		super();
		this.setId(id);
		this.name = name;
		this.gender = gender;
		this.age = age;
		this.weight = weight;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}
}

Example

package com.mytest;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;

public class Example {
    
	public static Logger logger = LoggerFactory.getLogger(Example.class);       
	
	public static void main(String[] args) {
        List<Person> list = Lists.newArrayList();
        list.add(new Person(4L,"jason", "male", 16, 120.50));
        list.add(new Person(1L,"tom", "male", 48, 163.50));
        list.add(new Person(3L,"john", "male", 33, 105));
        list.add(new Person(2L,"rose", "female", 26, 90));
        
        
        logger.debug(list.toString());
        //获取ids
        List<Long> ids  = entityIds(list);  //entityIds方法
        logger.debug("---------------ids-------------------");
        logger.debug(ids.toString());
        
        logger.debug("---------------maps-------------------");
        //获取map
        Map<Long, Person> maps = entityMaps(list); //entityMaps方法
        Set<Long> keys = maps.keySet();
        for (Long id : keys) {
			logger.debug("key: " + id + " value: " + maps.get(id));
		}
	}
	
	/**
	 * 获取表记录集合的Id集合
	 * @param list
	 * @return
	 */
	public static<T extends BaseEntity> List<Long> entityIds(List<T> list){
		List<Long> ids = Lists.transform(list, new Function<T, Long>(){
        	    public Long apply(T entity){
        		return entity.getId();
        	    }
                }); 
		return ids;
	}
	
	/**
	 * 根据实体记录,输出Map<Long id,K extend BaseEntity>集合
	 * @param list
	 * @return
	 */
	public static<V extends BaseEntity> Map<Long,V> entityMaps(List<V> list){
	        Map<Long,V> maps = Maps.uniqueIndex(list.iterator(),  new Function<V, Long>() {
		    @Override
		    public Long apply(V entity) {
		        return entity.getId();
		    }
		});
		return maps;
	}
	
}


entityIds方法

        /**
	 * 获取表记录集合的Id集合
	 * @param list
	 * @return
	 */
	public static<T extends BaseEntity> List<Long> entityIds(List<T> list){
		List<Long> ids = Lists.transform(list, new Function<T, Long>(){
        	    public Long apply(T entity){
        		return entity.getId();
        	    }
                }); 
		return ids;
	}


entityMaps方法

        /**
	 * 根据实体记录,输出Map<Long id,K extend BaseEntity>集合
	 * @param list
	 * @return
	 */
	public static<V extends BaseEntity> Map<Long,V> entityMaps(List<V> list){
	        Map<Long,V> maps = Maps.uniqueIndex(list.iterator(),  new Function<V, Long>() {
		    @Override
		    public Long apply(V entity) {
		        return entity.getId();
		    }
		});
		return maps;
	}


引入包,可参考pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.gzdfbz</groupId>
	<artifactId>mytest</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>18.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.3.2</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.7</version>
		</dependency>

		<dependency>
			<groupId>joda-time</groupId>
			<artifactId>joda-time</artifactId>
			<version>2.3</version>
		</dependency>



	</dependencies>
</project>

log4j参考:

#
log4j.rootLogger=DEBUG,console
log4j.additivity.org.apache=true

#
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
log4j.appender.console.layout.ConversionPattern=%l: %m %x %n


log4j.appender.com.mytest =  debug


© 著作权归作者所有

youway
粉丝 3
博文 44
码字总数 16832
作品 0
程序员
私信 提问
Google Guava 中文指南

温馨提示:Guava 中文指南的 GitHub 地址为 guava-guide,欢迎大家、,纠错。 Guava 中文指南   Guava 项目包含若干被 Google 的 Java 项目依赖的核心类库,例如:集合、缓存、原生类型支持...

qq_35246620
2017/09/13
0
0
Guava集合-不可变集合

JDK的Collections.unmodifiableXXX方法实现不可变集合的一些问题:   1.它用起来笨拙繁琐你不得不在每个防御性编程拷贝的地方用这个方法   2.它不安全:如果有对象reference原始的被封装...

Kevin-air
2016/08/04
32
0
Google Guava 的 5 个鲜为人知的特性

(点击上方公众号,可快速关注) 来源:花名有孚, it.deepinmind.com/java/2015/03/27/google-guava-5-things-you-never-knew-it-can-do.html Google Guava有哪些比较冷门但却又实用的特性呢...

px01ih8
2017/12/07
0
0
Google Guava教程

Google Guava官方教程(中文版) 原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [colle...

casoc
2015/10/12
489
0
【java代码之美】---guava之Immutable(不可变)集合

Immutable(不可变)集合 一、概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开。Collections是jdk提供的一个工具类。 Guava中不可变对象和C...

雨点的名字
2018/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS 打印控制

JS 打印控制 var PrintStartString = "<!--打印开始标示符-->";//设置打印开始区域var PrintEndString = "<!--打印结束标示符-->";//设置打印结束区域var HtmlText = window.do......

DrChenXX
16分钟前
5
0
LevelDB:使用介绍

LevelDB 提供的接口其实很简单,下面举例进行简单说明。 安装 git clone https://github.com/google/leveldb cd leveldb mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. ......

slagga
21分钟前
5
0
《JavaScript正则表达式迷你书》读书笔记

正则基础 常见简写形式 字符组 具体含义 记忆方式 \d 表示 [0-9]。表示是一位数字。 其英文是 digit(数字) \D 表示 [^0-9]。表示除数字外的任意字符。 \w 表示 [0-9a-zA-Z_]。表示数字、大小...

muzi131313
26分钟前
4
0
Git的反悔操作

概述 这次主要来讲讲Git的反悔操作,自己平时在写代码的过程中经常会出现想要弃用所有的改动或回滚到上一次commit的情况。Git上的反悔操作有reset、rebase、revert等,每个操作各有区别和对应...

duduYZ
26分钟前
2
0
实现双向绑定Proxy比defineproperty优劣如何?

前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向...

寻找海蓝
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部