Guava入门~Maps

import bbejeck.guava.common.model.Book;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;


public class MapsTest {
   private  Book book = new Book.Builder().isbn("ISBN123").title("book1").build();
   private  Book book2 = new Book.Builder().isbn("ISBN456").title("book2").build();
   private  Book book3 = new Book.Builder().isbn("ISBN789").title("book3").build();
   private  List<Book> books = Lists.newArrayList(book,book2,book3);

    @Test
    public void uniqueIndexTest(){
    	Map<String,Book> emptyMap = Maps.newHashMap();
        Map<String,Book> bookMap = Maps.uniqueIndex(books,new Function<Book, String>() {
            @Override
            public String apply(Book book) {
                return book.getIsbn();
            }
        });
       assertThat(bookMap.get("ISBN123"),is(book));
       assertThat(bookMap.get("ISBN456"),is(book2));
       assertThat(bookMap.get("ISBN789"),is(book3));
       
       Map<String,Book> bookMap2 = Maps.newHashMap();
       bookMap2.put("ISBN123", book);
       bookMap2.put("ISBN456", book2);
       
       MapDifference<String,Book> diffMap = Maps.difference(bookMap, bookMap2);
       System.out.println(diffMap);
    }

    @Test
    public void asMapTest(){
        Set<Book> bookSet = Sets.newHashSet(books);
        Map<Book,String> bookToIsbn = Maps.asMap(bookSet,new Function<Book, String>() {
            @Override
            public String apply(Book book) {
                return book.getIsbn();
            }
        });
        assertThat(bookToIsbn.get(book),is("ISBN123"));
        assertThat(bookToIsbn.get(book2),is("ISBN456"));
        assertThat(bookToIsbn.get(book3),is("ISBN789"));
    }

    @Test
    public void transformValuesTest(){
        Map<String,Book> bookMap = Maps.uniqueIndex(books,new Function<Book, String>() {
            @Override
            public String apply(Book book) {
                return book.getIsbn();
            }
        });

        Map<String,String> map = Maps.transformValues(bookMap,new Function<Book, String>() {
            @Override
            public String apply(Book book) {
                 return book.getTitle();
            }
        });

        assertThat(map.get("ISBN123"),is("book1"));
        assertThat(map.get("ISBN456"),is("book2"));
        assertThat(map.get("ISBN789"),is("book3"));
    }

    @Test
    public void transformEntriesTest(){
        Map<String,Book> bookMap = Maps.uniqueIndex(books,new Function<Book, String>() {
            @Override
            public String apply(Book book) {
                return book.getIsbn();
            }
        });

        Map<String,String> map = Maps.transformEntries(bookMap,new Maps.EntryTransformer<String,Book,String>(){
            @Override
            public String transformEntry(String key, Book value) {
                StringBuilder builder = new StringBuilder();
                return builder.append(key).append("|").append(value.getTitle()).toString();
            }
        });

        assertThat(map.get("ISBN123"),is("ISBN123|book1"));
        assertThat(map.get("ISBN456"),is("ISBN456|book2"));
        assertThat(map.get("ISBN789"),is("ISBN789|book3"));
    }

}

新建Map

Map<String,Book> emptyMap = Maps.newHashMap();

差集

MapDifference<String,Book> diffMap = Maps.difference(bookMap, bookMap2);

List转Map

Map<String,Book> bookMap = Maps.uniqueIndex(books,new Function<Book, String>() {
    @Override
    public String apply(Book book) {
        return book.getIsbn();
    }
});

Set转Map

Set<Book> bookSet = Sets.newHashSet(books);
Map<Book,String> bookToIsbn = Maps.asMap(bookSet,new Function<Book, String>() {
    @Override
    public String apply(Book book) {
        return book.getIsbn();
    }
});

转换--转换值

Map<String,String> map = Maps.transformValues(bookMap,new Function<Book, String>() {
    @Override
    public String apply(Book book) {
         return book.getTitle();
    }
});

转换--转换Entity

Map<String,String> map = Maps.transformEntries(bookMap,new Maps.EntryTransformer<String,Book,String>(){
    @Override
    public String transformEntry(String key, Book value) {
        StringBuilder builder = new StringBuilder();
        return builder.append(key).append("|").append(value.getTitle()).toString();
    }
});

Book

package bbejeck.guava.common.model;

import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import static com.google.common.base.Preconditions.*;
/**
 * User: Bill Bejeck
 * Date: 3/27/13
 * Time: 10:56 PM
 */
public class Book implements Comparable<Book> {

    private String author;
    private String title;
    private String publisher;
    private String isbn;
    private double price;

    public Book(String author, String title, String publisher, String isbn, double price) {
        this.author = checkNotNull(author,"Author can't be null");
        this.title = checkNotNull(title,"Title can't be null");
        this.publisher = checkNotNull(publisher,"Publisher can't be null");
        this.isbn = checkNotNull(isbn,"ISBN can't be null");
        checkArgument(price > 0.0,"Price must be more than zero");
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public String getPublisher() {
        return publisher;
    }

    public String getIsbn() {
        return isbn;
    }


    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return Objects.toStringHelper(this)
                .omitNullValues()
                .add("title", title)
                .add("author", author)
                .add("publisher", publisher)
                .add("price",price)
                .add("isbn", isbn).toString();
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(title, author, publisher, isbn,price);
    }

    @Override
    public boolean equals(Object obj) {
        return Objects.equal(this, obj);
    }

    @Override
    public int compareTo(Book o) {
        return ComparisonChain.start()
                .compare(this.title, o.getTitle())
                .compare(this.author, o.getAuthor())
                .compare(this.publisher, o.getPublisher())
                .compare(this.isbn, o.getIsbn())
                .compare(this.price, o.getPrice())
                .result();
    }

    public static class Builder {
        private String author = "The Author";
        private String title = "A BOOK";
        private String publisher = "Publisher";
        private String isbn = "ABCDE1234567";
        private double price = 0.99;

        public Builder author(String author) {
            this.author = author;
            return this;
        }

        public Builder title(String title) {
            this.title = title;
            return this;
        }

        public Builder publisher(String publisher) {
            this.publisher = publisher;
            return this;
        }

        public Builder isbn(String isbn) {
            this.isbn = isbn;
            return this;
        }

        public Builder price(double price) {
            this.price = price;
            return this;
        }

        public Book build(){
            return new Book(this.author,this.title,this.publisher,this.isbn,this.price);
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值