精华内容
下载资源
问答
  • java实体转map工具类

    2015-04-14 16:42:51
    java实体类转换为map mybatis里用map更方便
  • 本篇文章主要介绍了java生成json字符串的方法,包括map对象转换成json对象,list转换成json,json转换成list和map,有兴趣的可以了解一下。
  • 将一个List集合类型的javabean转为Map<id,bean> Bean为List对象的元素,List < Bean > 此处List对象的变量为:beanList Map<String, Bean> idMap = beanList.stream().collect( Collectors....

    List 转为 Map<id, bean>

    • User是List对象的元素,List<User>
    • List对象的变量名为:userList
    • id 将作为 Map 的 Key
    Map<String, User> idMap =
    	userList.stream().collect(
    		Collectors.toMap(User::getId, b->b)
    	);
    

    一主多子 javaBean List 转为 Map<id, Map<id, itemBean> >

    一主,主Bean: User
    多子,子Bean: UserItem
    集合:List<User>
    转Map:Map<User_id, Map <UserItem_id, UserItem> >

    一主多子的主javaBean为List对象的元素,List <User>
    此处List对象的变量为:userList

    Map<String, Map<String, UserItem>> collect = 
    	userList.stream().collect(
    		Collectors.toMap(
    			User::getId, b -> {
    				return b.getUserItem().stream().collect(
    						Collectors.toMap(UserItem::getId, c -> c)
    				);
                }
            )
        );
    
    展开全文
  • java-利用反射生成map集合

    千次阅读 2018-07-09 21:47:09
    1.根据传入的对象生成Map集合 @Test public void test02(){ User user = new User(); user.setId(1); user.setName("Albert"); user.setSex("男"); try{ Map&lt;String...
    1.根据传入的对象生成Map集合
    
     @Test
        public void test02(){
            User user = new User();
            user.setId(1);
            user.setName("Albert");
            user.setSex("男");
            try{
                Map<String, Object> map = getFieldVlaue(user);
                System.out.println("通过反射获取属性值:"+map);
            }catch(Exception e) {
    
            }
        }
    
        /**
         * 利用反射生成map
         * @param obj
         * @return
         * @throws Exception
         */
        public static Map<String, Object> getFieldVlaue(Object obj) throws Exception {
            Map<String, Object> mapValue = new HashMap<String, Object>();
            Class<?> cls = obj.getClass();
            Field[] fields = cls.getDeclaredFields();
            for (Field field : fields) {
                String name = field.getName();
                String strGet = "get" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
                Method methodGet = cls.getDeclaredMethod(strGet);
                Object object = methodGet.invoke(obj);
                String value = object != null ? object.toString() : "";
                mapValue.put(name, value);
            }
            return mapValue;
        }

    展开全文
  • java.lang.IllegalStateException: Duplicate key g1 at java.util.stream.Collectors.lambda$throwingMerger 错误。 key相同时当前值替换原始值 (oldVal, currVal) -> currVal key相同时保留原始值 (oldVal...

    一、最常见的初始化方式

    先创建,再添加元素

    List

    从源码可以看出:

    • List 的默认长度为10
    • 递增后的长度为先前长度的 1.5 倍
    • 最大长度是 Integer.MAX_VALUE,即 2,147,483,647 或 0x7f ff ff ff
    List<String> list = new ArrayList<>();
    list.add("str1");
    list.add("str2");
    list.add("str3");
    

    当元素是静态对象时,可以使用静态代码块在初始化时进行赋值

    private static List<String> static_list = new ArrayList<>();
    static {
        static_list.add("str1");
        static_list.add("str2");
        static_list.add("str3");
    }
    

    Map

    从源码可以看出:

    • hashMap 的初始长度为 16
    • 递增后的长度为之前的 2 倍
    • 最大长度是 1<<30 - 1,即 1,073,741,824‬ - 8 或 0x40 00 00 00 - 1
    Map<String, String> map = newHashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");
    

    当元素是静态对象时,可以使用静态代码块在初始化时进行赋值

    private static Map<String, String> static_map = new HashMap<>();
    static {
        static_map.put("key1", "value1");
        static_map.put("key2", "value2");
        static_map.put("key3", "value3");
    }
    

    二、使用双花括号在初始化的同时赋值

    外层的 {} 定义了一个匿名内部类。内层的 {} 定义了一个实例初始化代码块。这个代码块在初始化内部类时执行。所以这里相当于定义了一个匿名内部类,并使用 add 添加元素来初始化。

    但这种方式有几个缺点:

    1. 使用匿名内部类,会有效率上的损失。当然在大多数情况下,这点效率都是可接受的。
    2. 静态内部类持有所在外部类的引用。如果需要将 List 返回给到其他地方使用,可能造成内存泄漏。

    List

    List<String> list = new ArrayList<String>() {
     {
            add("str1");
            add("str2");
            add("str3");
    }};
    

    Map

    Map<String, String> map = new HashMap<String, String>() {
    {
            put("key1", "value1");
            put("key2", "value2");
            put("key3", "value3");
    }};
    

    三、利用Arrays工具类

    List

    Arrays.asList使用了静态内部类,该类继承自 AbstractList,实现了 RandomAccess,内部使用了一个数组来存储元素。注意:内部定义的 ArrayList 并没有实现 List 接口,所以也不支持修改元素。

    ArrayList(E[] array) {
    	a = Objects.requireNonNull(array);
    }
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
    

    查看源码可以发现,虽然 Arrays 和 ArrayList 都是在 java.utils 包下,但它们创建的 ArrayList 确是两个同名,但不同的东西。

    Arrays 中声明了一个ArrayList 的内部类,但是该类不支持增删元素,如果使用了诸如 add 方法,在编译时不会报错,但运行时会报 UnsupportedOperationException
    在这里插入图片描述
    由于 Arrays 的 asList 方法使用了 “变长参数列表”,因此即使直接使用多个字符串作为参数,在编译时也会被自动装包成数组。

    List<String> list1 = Arrays.asList(new String[] {"str1 ", "str2", "str3"});
    
    List<String> list2 = Arrays.asList("str1 ", "str2", "str3");
    

    四、利用Lists工具类

    List

    List 工具类提供了一个 newArrayList 的静态方法,从源码可以看出,newArrayList 实际只是对 ArrayList 无参初始化方法的封装,然后通过遍历迭代器 Iterator,将迭代器中的所有元素加入 List 而已

    public static <E> ArrayList<E> newArrayList(final Iterator<? extends E> iterator) {
    	final ArrayList<E> list = newArrayList();
    	Iterators.addAll(list, iterator);
    	return list;
    }
    public static <E> ArrayList<E> newArrayList() {
    	return new ArrayList<>();
    }
    public static <T> boolean addAll(final Collection<T> collection, final Iterator<? extends T> iterator) {
    	Objects.requireNonNull(collection);
    	Objects.requireNonNull(iterator);
    	boolean wasModified = false;
    	while (iterator.hasNext()) {
    	    wasModified |= collection.add(iterator.next());
    	}
    	return wasModified;
    }
    

    Lists 提供了两个方法:一个是创建一个空列表;一个是创建空列表的同时遍历迭代器,将它的值添加到列表中。

    List<String> list = Lists.newArrayList();
    list1.add("str1");
    list1.add("str2");
    list1.add("str3");
    

    注意:这里并不能用双花括号表达式直接添加元素

    List<String> list = Lists.newArrayList(list.iterator());
    

    五、利用Collections工具类

    List

    创建一个固定长度的 CopiesList,List 长度不能改变,且元素都一样,且也是不可改变的。Java在实现时,仅使用了一个空间,用来存存放元素,当N足够大时,可以节省空间和性能。

    同样,和 Arrays 创建的 List 一样,都没有实现 List 接口,因此使用add方法,同样会在编译时报错java.lang.UnsupportedOperationException
    在这里插入图片描述

    CopiesList<String> list1 = Collections.nCopies(5, "str");
    

    此外,Collections 还提供了一个为 List 一次性添加所有元素的方法,弥补了原先 List 只能添加 Collections,而不支持数组的缺憾。

    List<String> list2 = new ArrayList<>();
    Collections.addAll(list1, new String[]{"str1", "str2", "str3"});
    Collections.addAll(list1, "str4", "str5", "str6");
    

    六、流式转化

    流是 Java8 的新特性,提供了一种类似 SQL 语句从数据库中查询数据的方式,通过封装好的函数和链式调用,高阶抽象并简化操作。

    它可以对传入流内部的元素进行筛选、排序、聚合等中间操作(intermediate operate),最后由最终操作(terminal operation)得到前面处理的结果。

    通过静态的 Stream.of 方法接收元素,然后通过 collect 方法处理得到最终结果。

    List

    List<String> list1 = Stream.of("str1", "str2", "str3").collect(Collectors.toList());
    

    Map

    Collectors.toMap() 知识点:
    在这里插入图片描述

    • Java 8 中我们可以通过 :: 关键字来访问类的构造方法,对象方法,静态方法。
    • Java8 允许在接口中加入具体方法,接口中的具体方法有两种,default 方法和 static 方法,identity () 就是 Function 接口的一个静态方法。Function.identity() 是一个返回一个跟输入一样的 Lambda 表达式对象,形式为 t -> t
      在这里插入图片描述
    • 第三个参数是合并函数,如果不指定 mergeFunction,当存在两个 key 相同的元素时,会报 java.lang.IllegalStateException: Duplicate key g1 at java.util.stream.Collectors.lambda$throwingMerger 错误。
      1. key相同时当前值替换原始值
        (oldVal, currVal) -> currVal
      2. key相同时保留原始值
        (oldVal, currVal) -> oldVal

    Test.java

    Map<String, Book> map = books.stream()
    	.sorted(Comparator.comparing(Book::getISBN))
    	.collect(Collectors.toMap(Book::getISBN, Function.identity(), (oldVal, currVal) -> oldVal));
    

    Book.java

    public class Book {
        public String name;
        public String author;
        public float price;
        public String ISBN;
    
        public Book(String name, String author, float price, String ISBN) {
            this.name = name;
            this.author = author;
            this.price = price;
            this.ISBN = ISBN;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public float getPrice() {
            return price;
        }
    
        public void setPrice(float price) {
            this.price = price;
        }
    
        public String getISBN() {
            return ISBN;
        }
    
        public void setISBN(String ISBN) {
            this.ISBN = ISBN;
        }
    }
    
    展开全文
  • java读取配置文件信息生成Map对象

    千次阅读 2018-08-30 11:35:17
    通过读取配置文件生成map对象便于提取文件内容和转码 文本文件为config下的device.ini import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import ...

    通过读取配置文件生成map对象便于提取文件内容和转码

    文本文件为config下的device.ini

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.util.ResourceUtils;
    
    public class TransDeviceCode {
        /**读取config文件下device.in文件,
         * 
         * @param file  device.ini文件地址
         * @return
         */
        private Map<String,String> tempMap;
        public TransDeviceCode(){
        }
        public TransDeviceCode(String fileName){
            tempMap=new HashMap<String,String>();
            String strLine;
            BufferedReader bufferedReader;
            StringBuffer buffer;
            File file;
            try {
                file=ResourceUtils.getFile("classpath:"+fileName);
                bufferedReader = new BufferedReader(new FileReader(file));
                while ((strLine = bufferedReader.readLine()) != null) {
                    strLine = strLine.trim();
                    char arr[] = strLine.toCharArray();
                    if(strLine.indexOf('#')>=0) {
                        continue;
                    }
                    if(strLine.length() == 0) {
                        continue;
                    }
                    buffer = new StringBuffer();
                    for(int i=0; i<arr.length; i++) {
                        char c = arr[i];
                        int ascii = (int)c;
                        if(ascii == 65533 || ascii == 0) {
                            continue;
                        }else{
                            buffer.append(arr[i]);
                        }
                    }
                    String sarr[] = buffer.toString().split("   ");
                    tempMap.put(sarr[1].trim(), sarr[3].trim());   //这里需要哪一列的信息就提取哪一列
                }
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //可以通过此方法转码
        public String getValue(String key){
            key=key.trim();
            String value=this.tempMap.get(key);
            if(value==null || value==""){
                value=key;
            }
            value=value.trim();
            return value;
        }
    }
    
    展开全文
  • 将对象 List 根据的某一字段生成 Map,使用 Java8 stream 的 toMap 操作实现非常便捷。 1、转换成对象某一字段与对象的Map 示例代码如下: Map, Object> map = objectList.stream().collect(Collectors.toMap(Object...
  • List<User> userList=new ArrayList<>(); //把实体里面的Id单独抽取出来 Map<... userInfoMap= userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
  • 实际开发中总是存在javamap想换转换的事情,而这种事公共方法可以写成一个工具类来处理。代码如下: 代码 MapUtils.java 工具类代码: package com.kq.cloud.common.util; import org.apache.commons....
  • JAVA实现map转成XML格式

    千次阅读 2019-12-03 10:22:24
    JAVA实现map集合转成XML格式 import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.dom4j.Document; import org.dom4j.DocumentException; import org...
  • MapStruct - 简化不同类型bean之间映射的代码生成器,基于一个约定优于配置的方式。
  • JavaMap和泛型

    千次阅读 2019-08-28 22:57:08
    Map集合 Map:一次添加一对元素。Collection一次添加一个元素。Map集合也称双列集合,Collection集合称为单列集合。其实Map集合中存储的就是键值对。map集合中必须保证键的唯一性。 常用方法 1.添加 : value put...
  • JDK8 stream使用toMap生成map

    千次阅读 2020-04-16 11:19:24
    .collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1)); .collect(Collectors.toMap(UserBo::getUserId, v -> v, (k, v) -> v)); 对Collectors.toMap有些不清楚。 第三个参数, 是什么作用? ...
  • java8中map新增方法详解

    千次阅读 2019-09-08 12:45:58
    map新增的方法: getOrDefault forEach putIfAbsent compute computeIfAbsent computeIfPresent merge remove(key,value) replace replaceAll getOrDefault default V getOrDefault(Object key, V ...
  • java生成excel.rar

    2019-07-31 14:41:00
    查询数据库中的数据,生成map形式,处理后通过java生成到excel
  • java8中的map与flatmap

    万次阅读 2020-12-06 20:55:52
    假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],如果我们使用java实现这个需求,你会怎么实现呢?可能我们第一个想法是下面这种写法: words.stream() .map...
  • 一个Java代理生成/tmp/perf-<pid>.map只是在实时(JIT)文件与使用-compiled方法。 建造 确保将JAVA_HOME配置为指向JDK。 您需要cmake> = 2.8.6(请参阅 )。 然后在命令行上运行以下命令: cmake . make # will ...
  • java工具类之map中存放list<实体类>,用于生成数据测试接口 Java Map 存放list集合 Map接口中键和值一一映射. 可以通过键来获取值。 应用场景 比如你测试一个接口,返回的是一条数据。 图示: 后端的这么写的...
  • java底层读取配置文件,生成map,可以根据key模糊匹配查询,封装好了方法。比如getVal("spring.dubbo*url")
  • javamap 9种常规用法

    万次阅读 2016-10-13 14:33:03
    下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。 0、将Map转换为List类型 在javaMap接口提供了三种集合获取方式:Key set,,value set, and key-value set.。它们都可以通过构造方法...
  • lambda表达式生成map

    千次阅读 2019-06-03 19:50:41
    Map<Long, EstateVr> apEstateIdToEstateVrMap = estateVrs.stream().collect(Collectors.toMap(arg -> arg.getApEstateId(), arg -> arg, (o, n) -> n )); Map<Long, List<EstateVr&...
  • Javamap进行排序并生成序号

    千次阅读 2017-11-13 14:43:49
    最近做的项目有这样一个需求:要求对map中的值进行排序并生成序号。如果值相等则序号不变;如果不相等序号为该数数值在所有元素中的索引。如下表所示: Key(String) Value(Float) Idx 23 12.4 1 10 3.2 2 ...
  • MapStruct是一个Java用于为Java Bean类生成类型安全和高性能的映射器。 它使您不必手工编写映射代码,这是一个繁琐且容易出错的任务。 该生成器具有合理的默认值和许多内置的类型转换,但是在配置或实现特殊行为时...
  • Java基础之Java8中map和flatMap的使用

    万次阅读 多人点赞 2019-07-31 23:56:05
    Java基础之Java8中map和flatMap的使用 一、介绍 首先,看下map和flatMap的官方文档说明 map flatMap 其实单纯的看api说明还是比较抽象,下面我将以几个实战例子来帮助我们理解。然后再回过头来看它的说明,就...
  • java初始化静态map

    千次阅读 2019-11-01 15:11:21
    怎么在Java中初始化一个静态的map 我想到的两种方法如下,大家是否有更好的建议呢? 方法一:static初始化器 方法二:实例初始化(匿名子类) 下面是描述上面两种方法的例子 import java.util.HashMap; import java....
  • javaMap对象转换成JSON字符串

    千次阅读 2020-04-30 16:26:07
    Map<String, String> params = getParams(adentity); //将参数map转换成json字符串 String resData = JSON.toJSONString(params, SerializerFeature.WriteMapNullValue);
  • 可以构建出一个支持链式开发的map 可以通过现有的map转换成链式开发的map 可以通过一个实体对象变成支持链式开发的map
  • Java生成PDF文件(Itext篇)

    千次阅读 2018-08-15 18:14:24
    在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的...
  • Java8遍历MapMap转List、List转Map

    千次阅读 2020-05-27 19:53:00
    遍历Map Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); // Map.keySet遍历 for (Integer k : map.keySet()) { System.out.println(k + " ==>....
  • Java 各类Map使用场景之Map概述

    千次阅读 2017-04-05 14:40:22
    Map隶属java.util包,util包是包含了collection框架,遗留的collection类、时间模型、日期和时间、国际化和各种工具类(字符串标记生成器、随机数生成器和位数组.Mapjava中是一个接口。取代了Dictionary类,后者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 352,793
精华内容 141,117
关键字:

java生成map

java 订阅