精华内容
下载资源
问答
  • mapStruct 找不到符号错误

    千次阅读 2019-05-16 15:54:09
    [ERROR] /Users/yuqing/Downloads/comsunnyMapStruct/src/test/java/MapStructTest.java:[6,21] 找不到符号 符号: 方法 setName(java.lang.String) 位置: 类型为com.sunny.SimpleSource的变量 simpleSource [ERROR...

    根据官网提示编写测试类,并进行编译mapper时,运行

    • mvn clean install -X
      报错如下
    [ERROR] COMPILATION ERROR : 
    [INFO] -------------------------------------------------------------
    [ERROR] /Users/yuqing/Downloads/comsunnyMapStruct/src/test/java/MapStructTest.java:[6,21] 找不到符号
      符号:   方法 setName(java.lang.String)
      位置: 类型为com.sunny.SimpleSource的变量 simpleSource
    [ERROR] /Users/yuqing/Downloads/comsunnyMapStruct/src/test/java/MapStructTest.java:[7,21] 找不到符号
      符号:   方法 setDescription(java.lang.String)
      位置: 类型为com.sunny.SimpleSource的变量 simpleSource
    [INFO] 2 errors 
    [INFO] -------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.012 s
    [INFO] Finished at: 2019-05-16T11:55:12+08:00
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:testCompile (default-testCompile) on project MapStruct: Compilation failure: Compilation failure: 
    [ERROR] /Users/yuqing/Downloads/comsunnyMapStruct/src/test/java/MapStructTest.java:[6,21] 找不到符号
    [ERROR]   符号:   方法 setName(java.lang.String)
    [ERROR]   位置: 类型为com.sunny.SimpleSource的变量 simpleSource
    [ERROR] /Users/yuqing/Downloads/comsunnyMapStruct/src/test/java/MapStructTest.java:[7,21] 找不到符号
    [ERROR]   符号:   方法 setDescription(java.lang.String)
    [ERROR]   位置: 类型为com.sunny.SimpleSource的变量 simpleSource
    [ERROR] -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:testCompile (default-testCompile) on project MapStruct: Compilation failure
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
    Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1215)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.execute (TestCompilerMojo.java:181)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
    [ERROR] 
    [ERROR] 
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
    
    

    参考这个博主文章解决:
    intellij-idea – MapStruct和Lombok无法收集
    原因:

    它不起作用的原因是因为Maven只使用MapStruct处理器而不使用Lombok处理器. annotationProcessorPaths告诉maven它应该使用哪些处理器.

    展开全文
  • java8中的map与flatmap

    万次阅读 2020-12-06 20:55:52
    问题 假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d...但是如果我们运行会发现这样的写法是正确的,这个方法的问题在于,传递给map方法的Lambda为每个单词返回

    问题

    假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],如果我们使用java实现这个需求,你会怎么实现呢?可能我们第一个想法是下面这种写法:

    words.stream()
    .map(word -> word.split(""))
    .distinct()
    .collect(toList());

    但是如果我们运行会发现这样的写法是不正确的,这个方法的问题在于,传递给map方法的Lambda为每个单词返回了一个String[](String列表)。因此, map 返回的流实际上是Stream 类型的。你真正想要的是用
    Stream来表示一个字符流。因此,这是行不通的。

    我们带着上面的问题进行下面的分析:

    map和flatmap的区别

    map:对于stream中包含的元素使用 特定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。这个方法有三个对于原始类型的变种方法,分别是mapToInt,mapToLong和mapToDouble.这三个方法比较好理解,比如mapToInt就是把原始的Stream转换成一个新的Stream,这个新生成的Stream中的元素map方法示意图:

                                

    flatMap:和map类似,不同的是每个元素 转换得到是Stream对象,会把子Stream中的元素压缩到父集合中:

    flatMap方法示意图:  

                                    

    如果我们用一句话来总结flatmap:

    把几个小的list转换成一个大的list

                                   

    解决问题:

     对于我们开始提出的问题,我们分为两步来完成:

    1、分隔字符串,将数据中的字母都分隔开,形成多个小list新的stream

    2、组装成新的list

    
            String[] strings = {"Hello", "World"};
            List<String> collect = Stream.of(strings)
                    .map(s -> s.split(""))
                    .flatMap(s -> Stream.of(s))
                    .distinct()
                    .collect(Collectors.toList());
    
            collect.forEach(c->{
                System.out.println(c);
            });

    这样我们就可以很好地理解map和flatmap的区别了

    展开全文
  • JAVA--Map集合详解

    万次阅读 2019-06-25 14:38:20
    Map集合和Set集合很像,其实Set集合底层就是使用了Map集合。 什么时候使用Map集合: 当数据之间存在映射关系时,优先考虑Map集合。 Map集合常用共有方法 1.添加 V put(K key, V value):将指定的值与此映射中...

           特点:该集合存储键(key)值(value)对,一对一对往里存,而且要保证键(key)的唯一性。

           Map集合和Set集合很像,其实Set集合底层就是使用了Map集合。

    什么时候使用Map集合:

        数据之间存在映射关系时,优先考虑Map集合。

    Map集合常用共有方法

    1.添加

    V put(K key, V value):将指定的值与此映射中的指定键关联,添加键值对。

    void putAll(Map<? extends K,? extends V> m):从指定映射中将所有映射关系复制到此映射中,批量添加键值对。

    2.删除

    void clear():从此映射中移除所有映射关系,清空所有键值对。

    V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除,删除单个键值对。

    3.判断

    boolean containsKey(Object key):如果此映射包含指定键的映射关系(是否包含该键),则返回 true。

    boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值(是否包含该值),则返回 true。

    boolean isEmpty():如果此映射未包含键-值映射关系,该map集合为空,则返回 true。

    4.获取

    V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

    int size():返回此映射中的键-值映射关系(键值对)数。

    Collection<V> values():返回此映射中包含的值的 Collection 视图(集合)。

    重点取出方式:

    Set<K> keySet():返回此映射中包含的键的 Set 视图(集合)。

    Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图(集合)。

    练习

    class MapDemo{
    	public static void main(String[] args){
    		Map<String,String> map=new HashMap<String,String>();
    		
    		// 添加元素,如果出现相同的键,那么后添加的值会覆盖原有键对应值。
    		// put方法会返回被覆盖的值。
    		System.out.println("put:"+map.put("01","zhangsan1"));
    		System.out.println("put:"+map.put("01","wangwu"));
    		map.put("02","zhangsan2");
    		map.put("03","zhangsan3");
    		
    		System.out.println("containsKey:"+map.containsKey("022"));
    		System.out.println("remove:"+map.remove("02"));
    		
    		System.out.println("get:"+map.get("023"));
    		
    		map.put("04",null);	// 一般值不要存储null,没有意义
    		System.out.println("get:"+map.get("04"));
    		// 可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断
    		
    		// 获取map集合中所有的值
    		Collection<String> coll=map.values();
    		
    		System.out.println(coll);
    		System.out.println(map);
    		
    	}
    }
    

    Hashtable

    底层是哈希表数据结构

    特点:不可以存入null键null值,该集合是线程同步的,JDK1.0出现,效率低。

    HashMap

    底层是哈希表数据结构

    特点:允许使用null值和null键,该集合是线程不同步的,JDK1.2出现,效率高。

    Map集合的两种取出方式

    Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。

    1. Set<K> keySet():

    将Map集合中所有的键存入到Set集合。因为Set集合具备迭代器,所以可以通过迭代方法取出所有的键,再根据get()方法,获取每一个键对应的值。

          2.Set<Map.Entry<K,V>> entrySet():

    将Map集合中的映射关系存入到了Set集合中,而这个映射关系的数据类型就是:Map.Entry。

       Map.Entry:其实Entry也是一个接口,它是Map接口中的一个内部接口。 

    interface Map{
    	public static interface Entry{
    		public abstract Object getKey();
    		public abstract Object getValue();
    	}
    }
    
    class HashMap implements Map{
    	class Hahs implements Map.Entry{
    		public Object getKey(){};
    		public Object getValue(){};
    	}
    }
    

    案例 

    import java.util.*;
    class MapDemo2{
    	public static void main(String[] args){
    	Map<String,String> map=new HashMap<String,String>();
    	
    	map.put("02","zhangsan2");
    	map.put("03","zhangsan3");
    	map.put("01","zhangsan1");
    	map.put("04","zhangsan4");
    	
    	/*// 方法一:通过keySet()获取Map集合元素
    	// 先获取Map集合的所有键的Set集合,通过keySet()方法获取到
    	Set<String> keySet=map.keySet();
    	
    	// 有了键的Set集合,就可以获取其迭代器
    	Iterator<String> it=keySet.iterator();
    	while(it.hasNext()){
    		String key=it.next();
    		// 有了键可以通过Map集合的get()方法获取其对应的值
    		String value=map.get(key);
    		System.out.println("Key:"+key+",value:"+value);
    	}*/
    	
    	// 方法二:通过entrySet()获取Map集合元素
    	// 先获取Map集合中的映射关系的Set集合,通过entrySet()方法获取到
    	Set<Map.Entry<String,String>> entrySet=map.entrySet();
    	
    	// 有了键的Set集合,就可以获取其迭代器
    	Iterator<Map.Entry<String,String>> it=entrySet.iterator();
    	while(it.hasNext()){
    		Map.Entry<String,String> me=it.next();
    		// 有了映射关系可以通过映射关系的getKey()和getValue()方法获取其对应的键值
    		String key=me.getKey();
    		String value=me.getValue();
    		System.out.println("Key:"+key+",value:"+value);
    	}
    	
    	}
    }
    

    练习

    import java.util.*;
    /*
    目标:
    每一个学生都有对应的归属地。
    学生Student,地址String。
    学生属性:姓名,年龄。
    注意:姓名和年龄相同的视为同一个学生。
    保证学生的唯一性。
    
    思路:
    1.描述学生;
    2.定义Map容器。将学生(唯一性)作为键,地址作为值,存入;
    3.获取Map集合中的元素。
    */
    class MapTest{
    	public static void main(String[] args){
    	Map<Student,String> map=new HashMap<Student,String>();
    	
    	map.put(new Student("lisi1",21),"beijing");
    	map.put(new Student("lisi1",21),"tainjin");
    	map.put(new Student("lisi2",22),"shanghai");
    	map.put(new Student("lisi3",23),"nanjing");
    	map.put(new Student("lisi4",24),"jinan");
    	
    	// 第一种取出方式keySet
    	Set<Student> keySet=map.keySet();
    	
    	Iterator<Student> it=keySet.iterator();
    	while(it.hasNext()){
    		Student stu=it.next();
    		String addr=map.get(stu);	
    		sop(stu+"..."+addr);
    	}
    	
    	// 第二种取出方式entrySet
    	Set<Map.Entry<Student,String>> entrySet=map.entrySet();
    	
    	Iterator<Map.Entry<Student,String>> it2=entrySet.iterator();
    	while(it2.hasNext()){
    		Map.Entry<Student,String> me=it2.next();
    		Student stu=me.getKey();
    		String addr=me.getValue();
    		sop(stu+"......"+addr);
    	}
    	
    	}
    	
    	// 打印语句
    	public static void sop(Object obj){
    		System.out.println(obj);
    	}
    }
    
    // 学生类,保证学生的唯一性
    class Student implements Comparable<Student>{	
    	private String name;
    	private int age;
    	
    	public Student(String name,int age){
    		this.name=name;
    		this.age=age;
    	}
    	
    	// 防止该对象往二叉树数据类型集合中存储报异常,应使该对象具备可比性
    	public int compareTo(Student s){
    		int num=new Integer(this.age).compareTo(new Integer(s.age));
    		
    		if(num==0)
    			return this.name.compareTo(s.name);
    		
    		return num;
    	}
    	
    	// 保证学生的唯一性
    	public int hashCode(){
    		return this.name.hashCode()+age*35;
    	}
    	
    	public boolean equals(Object obj){
    		
    		if(!(obj instanceof Student))
    			throw new ClassCastException("类型不匹配!");
    		
    		Student s=(Student)obj;
    		
    		return this.name.equals(s.name) && this.age==s.age;
    	}
    	
    	public String getName(){
    		return name;
    	}
    	
    	public int getAge(){
    		return age;
    	}
    	
    	public String toString(){
    		return name+":"+age;
    	}
    }
    

    TreeMap

    底层是二叉树(红黑树)数据结构

    特点:线程不同步,可以同时给Map集合中的键进行排序。

    案例

    import java.util.*;
    /*
    目标:
    每一个学生都有对应的归属地。
    学生Student,地址String。
    学生属性:姓名,年龄。
    注意:姓名和年龄相同的视为同一个学生。
    保证学生的唯一性。
    并且对学生对象大的年龄进行升序排序。
    
    思路:
    因为数据是以键值对形式存在的,
    所以要使用可以排序的Map集合:TreeMap。
    1.描述学生;
    2.定义Map容器。将学生(唯一性)作为键,地址作为值,存入;
    3.获取Map集合中的元素。
    */
    class MapTest2{
    	public static void main(String[] args){
    	TreeMap<Student,String> tm=new TreeMap<Student,String>(new StuNameComparator());	 
    	
    	tm.put(new Student("lisi1",21),"beijing");
    	tm.put(new Student("blisi3",23),"nanjing");
    	// tm.put(new Student("lisi1",21),"tainjin");
    	tm.put(new Student("alisi4",24),"jinan");
    	tm.put(new Student("lisi2",22),"shanghai");
    	
    	Set<Map.Entry<Student,String>> entrySet=tm.entrySet();
    	
    	Iterator<Map.Entry<Student,String>> it=entrySet.iterator();
    	while(it.hasNext()){
    		Map.Entry<Student,String> me=it.next();
    		Student stu=me.getKey();
    		String addr=me.getValue();
    		sop(stu+"......"+addr);
    	}
    	}
    	// 打印语句
    	public static void sop(Object obj){
    		System.out.println(obj);
    	}
    }
    
    // 按照学生姓名排序,当对象本身具有比较性,但还需另一种比较,
    // 可以定义比较器,在集合初始化时传入比较器,当有两种比较方式时默认按照比较器方法排序
    class StuNameComparator implements Comparator<Student>{
    	public int compare(Student s1,Student s2){
    		int num =s1.getName().compareTo(s2.getName());
    		
    		if(num==0)
    			return new Integer(s1.getAge()).compareTo(s2.getAge());
    		
    		return num;
    	}	
    }
    
    // 学生类,保证学生的唯一性
    class Student implements Comparable<Student>{	
    	private String name;
    	private int age;
    	
    	public Student(String name,int age){
    		this.name=name;
    		this.age=age;
    	}
    	
    	// 防止该对象往二叉树数据类型集合中存储报异常,应使该对象具备可比性
    	public int compareTo(Student s){
    		int num=new Integer(this.age).compareTo(new Integer(s.age));
    		
    		if(num==0)
    			return this.name.compareTo(s.name);
    		
    		return num;
    	}
    	
    	// 保证学生的唯一性
    	public int hashCode(){
    		return this.name.hashCode()+age*35;
    	}
    	
    	public boolean equals(Object obj){
    		
    		if(!(obj instanceof Student))
    			throw new ClassCastException("类型不匹配!");
    		
    		Student s=(Student)obj;
    		
    		return this.name.equals(s.name) && this.age==s.age;
    	}
    	
    	public String getName(){
    		return name;
    	}
    	
    	public int getAge(){
    		return age;
    	}
    	
    	public String toString(){
    		return name+":"+age;
    	}
    }

    练习

    核心思想原理图

    import java.util.*;
    /*
    目标:
    "sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
    
    希望打印结果:
    a(1)c(2)……
    
    通过结果发现,每一个字母都有对应的次数。
    说明字母和次数之间存在映射关系。
    
    什么时候使用Map集合:
        当数据之间存在映射关系时,优先考虑Map集合。
    
    思路:
    1.将字符串转换成字符数组。因为要对每一个字母进行操作。
    2.定义一个Map集合。而且打印结果字母有顺序,所以使用TreeMap集合。
    3.遍历字符数组。
    	将每一个字母作为键去查Map集合元素。
    	如果返回null,将该字母和1存入到Map集合中。
    	如果返回不是null,说明该字母在Map集合已经存在并有对应次数(值)。
    	那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到Map集合中。原理:覆盖已有键对应的值。
    4.将Map集合中的数据变成指定的字符串形式返回。
    */
    class MapTest3{
    	public static void main(String[] args){
    		
    		String s="sdfgzxcv,asdfxcv+df";
    		
    		String result=charCount(s);
    		
    		System.out.println(result);
    		
    	}
    	
    	public static String charCount(String str){
    		
    		char[] chs=str.toCharArray();
    		
    		TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
    		
    		int count=0;
    		for(int x=0;x<chs.length;x++){
    			// 检查该字符是否为字母,如果不是跳出本次循环
    			if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
    				continue;
    				
    			Integer value=tm.get(chs[x]);
    			
    			if(value!=null)
    				count = value;
    			count++;
    			tm.put(chs[x],count);
    			
    			count=0;
    			
    			/*// 繁复写法
    			if(value==null){
    				tm.put(chs[x],1);
    			}else{
    				value=value+1;
    				tm.put(chs[x],value);
    			}*/
    		}
    		
    		// System.out.println(tm);
    		
    		StringBuilder sb=new StringBuilder();
    		Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
    		Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();
    		while(it.hasNext()){
    			Map.Entry<Character,Integer> me=it.next();
    			char key=me.getKey();
    			int value=me.getValue();
    			sb.append(key+"("+value+") ");
    		}
    		
    		return sb.toString();
    	}
    }
    

     

    展开全文
  • Java中Object转Map类型,Map转Object类型

    万次阅读 2020-07-31 09:40:11
    在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及两种类型的相互转换。 强制转换 在类型转换工程中,常见的转换方式为强制转换。如(String)map.get...

    前言

    在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换。

    强制转换

    在类型转换工程中,常见的转换方式为强制转换。如(String)map.get(key),(int)map.get(key)等。但是如果接收的类型为Map,此时强转(Map<String, Object>) obj则会报出警告。

    治标不治本

    很多人会使用@SuppressWarnings(“unchecked”)来解决编辑器中的警告,好看是好看了。但是这用来告诉编译器忽略警告,而警告却实实在在的存在。项目的风险还是存在。

    方法一

    可以使用java.lang.reflect.Field类完成ObjMap之间的相互转换.

    • ObjectMap类型
    //Object转Map
    public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<String, Object>();
        Class<?> cla = obj.getClass();
        Field[] fields = cla.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            String keyName = field.getName();
            Object value = field.get(obj);
            if (value == null)
                value = "";
            map.put(keyName, value);
        }
        return map;
    }
    
    • MapObject类型
    //Map转Object
    public static Object getMapToObject(Map<Object, Object> map, Class<?> cla) throws Exception {
        if (map == null)
            return null;
        Object obj = cla.newInstance();
        Class<?> cla = obj.getClass();
        Field[] fields = cla.getDeclaredFields();
        for (Field field : fields) {
            int mod = field.getModifiers();
            if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                continue;
            }
            field.setAccessible(true);
            if (map.containsKey(field.getName())) {
                field.set(obj, map.get(field.getName()));
            }
        }
        return obj;
    }
    

    通过Field类进行数据类型的转换。

    方法二

    通过BeanUtils工具类进行转换

    //1、map转换为object
    
    public static Object mapToObject(Map<String, Object> map, Class<?> cla)
        throws Exception {
    	if (map == null) 
    		return null;
      Object obj = clas.newInstance();
    	org.apache.commons.beanutils.BeanUtils.populate(obj, map);
    	return obj;
    }
    
    //2、object转换为map
    public static Map<?, ?> objectToMap(Object obj) {
    	if (obj == null) 
    		return null;
    	return new org.apache.commons.beanutils.BeanMap(obj);
    }
    

    总结

    最后,通过调用这两个方法就可以实现Object转Map类型,Map转Object类型。

    展开全文
  • java.util.Map——Map集合的常用方法

    万次阅读 多人点赞 2018-05-07 12:53:20
    Map集合用于储存元素对,Map储存的是一对键值(key和value),是通过key映射它的value;下面介绍的是Map集合的一些经常用到的方法以及代码示例。 1.map.size(); 方法作用:获取map集合类的大小(m...
  • Java中遍历Map集合的五种方式

    万次阅读 多人点赞 2021-01-28 23:26:04
    包含for循环遍历、entrySet使用iterator遍历,并且介绍了Java8新特性使用lambda表达式forEach遍历。
  • Java map

    万次阅读 2017-12-04 19:30:11
    Java8增强的Map集合Map接口中定义了如下常用的方法。 void clear():删除该Map对象中的所有key-value对。 boolean containsKey(Object key):查询Map中是否包含指定的key,如果包含则返回true。 boolean contains...
  • JDK8版本JAVA运行错误:找不到或无法加载主类 HelloJava的原因及解决方案一、错误描述二、编写HelloJava代码三、在命令行CMD窗口中运行代码四、错误原因分析解决方案注: 一、错误描述   1、安装jdk1.8 ...
  • 方法:map导出file,从file中读取得到map package com.filetomap; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io....
  • java数据结构之Map

    千次阅读 2018-09-07 10:05:44
    Java中的List和Map是使用频率非常高的数据结构。这里介绍下常用的Map实现。 先来看下类图: HashMap的实现原理 HashMap的实现原理参考:HashMap的实现原理 HashMap与HashTable的异同 HashTable与HashMap的...
  • IDEA下自动引用无法识别java.util.Map

    千次阅读 2019-01-23 12:42:48
    java.util.Map从下图配置中去掉
  • Java 集合List、Set、Map知识结构大全详解

    千次阅读 多人点赞 2019-07-17 16:37:51
    (2)Set 集 —— 值可重复 二、Map 接口 (1)HashMap —— 无序 1、取模法 2、Hash碰撞冲突 3、解决Hash冲突 (2)HashTable —— 无序 (3)TreeMap —— 有序 (4)ArrayMap——有序 三、List、Set、...
  • Java之映射(map)

    万次阅读 多人点赞 2018-06-06 21:23:48
    集是一个集合,它可以快速地...映射(map)数据结构就是为此而设计的。映射用来存放键/值对。如果提供了键,就能够查找值。它们之间是一一对应关系。 1.基本映射操作: Java类库为映射提供了两个通用的实现:Has...
  • Java基础之Java8中map和flatMap的使用

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

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

    万次阅读 2017-08-16 08:57:10
    package collection; import java.util.Arrays; import java.util.Collection;...* @Description:采用二维数组实现简单的Map集合(ArrayImplMap) * 1、新建或扩充数组 * 2、判断是否有值: * Y:覆盖 * N:新增 *
  • 介绍java中Pair和Map的区别

    万次阅读 2021-02-25 18:06:37
    目录核心java配对实现Pair类AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntryApache CommonsVavr库举个例子 在这篇文章中,我们讨论了一个非常有用的编程概念,配对(Pair)。配对提供了一种方便方式来...
  • Java中json转map方法,简单快捷

    万次阅读 2021-01-20 23:10:56
    使用的jar包,如果使用的事maven可直接接入这个pom.xml中——fastjson-1.2.47.jar【也可自行搜索使用】 【jar包已经打包下载好了,点击下载就好】:fastjson-1.2.47.jar(收积分,完全免费) <!-- 阿里...
  • Java集合之Map超详细讲解

    千次阅读 2019-07-06 21:17:29
    Map集合没有继承Collection接口,其提供的是键值的映射。Map不能包含相同的键,每个键只能映射一个值。键还决定了储存对象在映射中的储存位置。 HashMap集合特点:单一,无序 Map.Entry<K,V> 映射项(键-值...
  • 最近也是偶然的机会了解了vscode这个编辑器,相比于传统的IDE,它有很多我喜欢的特点,首先是轻量级,相比于Visual Studio,pycharm等IDE,它只有40多Mb的大小,下载和安装都很方便。其次就是它是一个编辑器,是...
  • java8中Map的10个常用新方法

    千次阅读 2019-06-18 14:17:09
    import java.util.HashMap;...import java.util.Map; import java.util.function.BiFunction; /** * @Description: java8中的map新方法 * @Author: JandMin */ public class MainTest { ...
  • 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笔记--Map的用法

    万次阅读 多人点赞 2018-08-07 20:04:39
    Map 接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。...每个元素由键与值两部分组成,通过键可以对所对应的值。 Collectio...
  • Java集合面试题

    万次阅读 多人点赞 2019-06-25 14:46:19
    Java 平台提供这个接口任何直接的实现。 Set ,是一个能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。 List ,是一个有序集合,可以包含重复元素。你可以通过它的索引来...
  • Java存储Map集合数据库

    万次阅读 2019-06-11 17:58:15
    从图中可以看到除了上面的数据为固定值,下面的数据(变量名和变量值都是固定的),这些数据如何存储表中呢?话多说直接上代码: 代码实现 controller @PostMapping("updateGroup") public APIResult updateGrou...
  • Java之路:映射(Map

    千次阅读 2018-12-11 15:39:36
    java.util中还增加了映射(Map)。映射是一个存储关键字和值的关联,或者说是“关键字/值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但是可以存在相同的值。有的...
  • Java Map根据value获取key

    千次阅读 2019-12-03 11:00:31
    * 注意:value相同的值有很多个,都会对应第一个找到的key上,因此要把找到的key标记,下次不再用 */ private static String getKey(Map<String,String> map,String value){ String...
  • Java基础之可设置过期时间的map

    千次阅读 2020-02-26 22:57:09
    Java基础之可设置过期时间的map 一、技术背景 在实际的项目开发中,我们经常会使用缓存中间件(如redis、MemCache等)来帮助我们提高系统的可用性和健壮性。 但是很多时候如果项目比较简单,就没有必要为了使用...
  • IDEA引入的时候找不到java.util.HashMap

    千次阅读 2018-12-07 22:34:00
    但是当我通过快捷键Alt+Enter导入的时候,并没有发现java.util.HashMap。 解决方法: 通过File-&amp;gt;Setting-&amp;gt;搜索Auto Import-&amp;gt;将java.util导入提示的排除设置删除。 解决问题截图...
  • Java遍历Map效率对比

    千次阅读 2019-03-25 21:04:11
    Java遍历Map效率对比 JavaMap容器的遍历有多种方式,但是不同的方式效率会大有不同,以前没有注意这些细节,随意使用遍历方式在本地可能没有什么影响,但是在项目在高频使用需要特别注意,尽量使用高效的方式。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 729,008
精华内容 291,603
关键字:

java找不到map

java 订阅