写在前面,注意引包,hutool和Jackson.databind,guava这里是多种实现,看自己想用哪个就引特定的包!

一、pojo 互转 map

二、list 互转 map

package list常用操作.list_map_pojo互相转化;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import model.Book;
import org.junit.Test;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class List_Bean_Map互转 {

    private static List<Book> list;

    private static Map<String,Object> map1;

    static {
        Book b1 = new Book().setBookId(1).setPrice(21.3).setLocation("sh").setAuthor("太宰治").setBookName("人间失格");
        Book b2 = new Book().setBookId(3).setPrice(21.3).setLocation("sd").setAuthor("村上").setBookName("当跑步时");
        Book b3 = new Book().setBookId(2).setPrice(13.3).setLocation("ah").setAuthor("黑泽").setBookName("七武士");
        Book b4 = new Book().setBookId(4).setPrice(26.3).setLocation("hb").setAuthor("张嘉译").setBookName("陪你到世界尽头");
        list = Lists.newArrayList(b1, b2, b3, b4);
    }

    static {
        map1 = Maps.newHashMap();

        map1.put("bookId",1);
        map1.put("bookName","人间失格");
        map1.put("author","太宰治");
        map1.put("price",21.3);
        map1.put("location","sh");
    }

    @Test
    public void pojoToJson(){
        Book book = list.get(0);
        String s = JSONUtil.toJsonPrettyStr(book);
        System.out.println(s);

//        {
//            "author": "太宰治",
//            "price": 21.3,
//            "location": "sh",
//            "bookName": "人间失格",
//            "bookId": 1
//        }
    }


    @Test
    public void mapStr(){
        System.out.println(map1);

//        {       author=太宰治,
//                price=21.3,
//                location=sh,
//                bookName=人间失格,
//                bookId=1
//        }
    }

    @Test
    public void pojoStr(){
        System.out.println(list.get(0));
//        Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null)
    }

    // 这里会出错
//    @Test
//    public void pojoToMap1(){
//        Book book = list.get(0);
//        Map<String, Object> map11 = MapUtil.createMap(Book.class);
//        System.out.println(map1);
//    }

    // java对象转Map1,hutool包下beanutil的使用
    @Test
    public void pojoToMap2(){
        Book book = list.get(0);
        Map<String, Object> map12 = BeanUtil.beanToMap(book);
        System.out.println(map12);
        // {bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null}
    }

    // java对象转Map1,jackson 包的使用的使用
    @Test
    public void pojoToMap3(){
        Book book = list.get(0);
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> map13 = mapper.convertValue(book, new TypeReference<Map<String, Object>>() {});
        System.out.println(map13);
//        {bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null}
    }

    // map to bean 测试1
    @Test
    public void mapToBean1(){
        Book book = list.get(0);
        Book book1 = JSONUtil.toBean(JSONUtil.toJsonStr(book), Book.class);
        System.out.println(book1);
//        Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null)

    }

    // map to bean 测试2
    @Test
    public void mapToBean2(){
        Book book = list.get(0);
        ObjectMapper mapper = new ObjectMapper();
        final Book book2 = mapper.convertValue(map1, Book.class);
        System.out.println(book2);
//        Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null)

    }

//    List<T> Map<K,V>,先清楚自己需要转的数据结构,K,V个是什么东西

    // list to map 测试一
    @Test
    public void listTomap1(){

        Map<Integer, String> collect = list.stream().collect(Collectors.toMap(Book::getBookId, Book::getBookName));
        System.out.println(collect);
//        {1=人间失格, 2=七武士, 3=当跑步时, 4=陪你到世界尽头}
    }

    // list to map 测试二,key值重复
    @Test
    public void listTomap2(){
        Map<Double, String> collect1 = list.stream().collect(Collectors.toMap(Book::getPrice, Book::getBookName,(oldValve,newValve) -> newValve));
        System.out.println(collect1);
//        {13.3=七武士, 26.3=陪你到世界尽头, 21.3=当跑步时}
    }

    // list to map 测试三,排序
    @Test
    public void listTomap3(){
        Map<Double, String> collect1 = list.stream()
                .sorted(Comparator.comparingDouble(Book::getPrice)).collect(Collectors.toMap(Book::getPrice, Book::getBookName, (oldValve, newValve) -> newValve,LinkedHashMap::new));
        System.out.println(collect1);
//       {13.3=七武士, 21.3=当跑步时, 26.3=陪你到世界尽头}
    }

    @Test
    public void listTomap4(){
        Map<String, Book> collect = list.stream().collect(Collectors.toMap(Book::getBookName, Function.identity()));
        System.out.println(collect);
//        {陪你到世界尽头=Book(bookId=4, bookName=陪你到世界尽头, author=张嘉译, location=hb, price=26.3, deci=null), 人间失格=Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null), 当跑步时=Book(bookId=3, bookName=当跑步时, author=村上, location=sd, price=21.3, deci=null), 七武士=Book(bookId=2, bookName=七武士, author=黑泽, location=ah, price=13.3, deci=null)}
    }


    @Test
    public void listTomap5(){
        Map<String, Book> map22= Maps.uniqueIndex(list, Book::getBookName);
        System.out.println(map22);
//        {
//             人间失格=Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null),
//              当跑步时=Book(bookId=3, bookName=当跑步时, author=村上, location=sd, price=21.3, deci=null),
//              七武士=Book(bookId=2, bookName=七武士, author=黑泽, location=ah, price=13.3, deci=null),
//              陪你到世界尽头=Book(bookId=4, bookName=陪你到世界尽头, author=张嘉译, location=hb, price=26.3, deci=null)
//      }
    }

    @Test
    public void listTomap6(){
        HashMap<String, Object> map = Maps.newHashMap();
        list.forEach(e -> map.put(e.getBookName(),e));
        System.out.println(map);
//        {
//             人间失格=Book(bookId=1, bookName=人间失格, author=太宰治, location=sh, price=21.3, deci=null),
//              当跑步时=Book(bookId=3, bookName=当跑步时, author=村上, location=sd, price=21.3, deci=null),
//              七武士=Book(bookId=2, bookName=七武士, author=黑泽, location=ah, price=13.3, deci=null),
//              陪你到世界尽头=Book(bookId=4, bookName=陪你到世界尽头, author=张嘉译, location=hb, price=26.3, deci=null)
//      }
    }




    // mapToList1 测试一

    @Test
    public void mapToList1(){
        Set<String> strings = map1.keySet();
        ArrayList<String> list = Lists.newArrayList(strings);
        System.out.println(list);
        //[author, price, location, bookName, bookId]
    }


    // mapToList2 测试二
    @Test
    public void mapToList2(){



    }



}

备注(2019-09-17)

其实在定义Pojo的时候,可以重写其toString方法,如下,这样就可以返回和Map一样的格式了

@Override
    public String toString() {
        return "Blog{" +
            "id=" + getId() +
            ", name='" + getName() + "'" +
            ", handle='" + getHandle() + "'" +
            "}";
    }