java map 转string_java-将Map String,Object转换为Map String,String

java-将Map 转换为Map

如何将Map转换为Map?

这不起作用:

Map map = new HashMap(); //Object is containing String

Map newMap =new HashMap(map);

11个解决方案

37 votes

现在我们有了Java 8 / streams,我们可以在列表中添加一个可能的答案:

假设每个值实际上都是String对象,则强制转换为String应该是安全的。 否则,可以使用其他一些将对象映射到字符串的机制。

Map map = new HashMap<>();

Map newMap = map.entrySet().stream()

.collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));

skeryl answered 2020-01-25T20:38:35Z

27 votes

如果您的Objects仅包含String,则可以这样做:

Map map = new HashMap(); //Object is containing String

Map newMap =new HashMap();

for (Map.Entry entry : map.entrySet()) {

if(entry.getValue() instanceof String){

newMap.put(entry.getKey(), (String) entry.getValue());

}

}

如果不是每个Objects不是String,则可以将(String) entry.getValue()替换为entry.getValue().toString()。

Shreyos Adikari answered 2020-01-25T20:38:11Z

18 votes

泛型类型是编译时的抽象。 在运行时,所有映射都具有相同的27186980426219530530类型。因此,如果您确定值是字符串,则可以在Java编译器上作弊:

Map m1 = new HashMap();

Map m2 = (Map) m1;

将键和值从一个集合复制到另一个是多余的。 但是这种方法仍然不好,因为它违反了泛型类型的安全性。 可能是您应该重新考虑代码以避免此类情况。

Mikhail answered 2020-01-25T20:39:00Z

6 votes

有两种方法可以做到这一点。 一个很简单但是不安全:

Map map = new HashMap();

Map newMap = new HashMap((Map)map); // unchecked warning

另一种方法没有编译器警告,并确保运行时的类型安全,这更加可靠。 (毕竟,您不能保证原始映射仅包含String值,否则为什么不首先是Map?)

Map map = new HashMap();

Map newMap = new HashMap();

@SuppressWarnings("unchecked") Map intermediate =

(Map)Collections.checkedMap(newMap, String.class, String.class);

intermediate.putAll(map);

cambecc answered 2020-01-25T20:39:25Z

2 votes

不可能。

这有点违反直觉。

您遇到的是“苹果是水果”但“每个水果都不是苹果”

去创建一个新的地图并检查instance of with String

Suresh Atta answered 2020-01-25T20:39:58Z

2 votes

当您从Object转换为String时,我建议您捕获并报告(以某种方式,这里我只是打印一条消息,通常是不好的)异常。

Map map = new HashMap(); //Object is containing String

Map newMap =new HashMap();

for (Map.Entry entry : map.entrySet()) {

try{

newMap.put(entry.getKey(), (String) entry.getValue());

}

catch(ClassCastException e){

System.out.println("ERROR: "+entry.getKey()+" -> "+entry.getValue()+

" not added, as "+entry.getValue()+" is not a String");

}

}

selig answered 2020-01-25T20:40:18Z

1 votes

虽然您可以通过蛮力投掷和禁止显示警告来做到这一点

Map map = new HashMap();

// Two casts in a row. Note no "new"!

@SuppressWarnings("unchecked")

Map newMap = (HashMap)(Map)map;

确实遗漏了整个要点。 :)

尝试将狭窄的泛型类型转换为更广泛的泛型类型意味着您一开始使用的是错误的类型。

打个比方:假设您有一个程序可以进行大量的文本处理。 假设您使用Objects(!!)进行处理的上半部分,然后决定使用正确键入作为String进行下半部分的处理,因此您将广播范围从Object缩小为String。幸运的是,您可以使用Java( 在这种情况下很容易)-但这只是掩盖了您在上半年使用弱输入的事实。 不好的做法,没有理由。

这里没有区别(只是更难投射)。 您应该始终使用强类型。 至少使用一些基本类型-然后可以使用通用通配符(“?Extended BaseType”或“?super BaseType”)来提供类型兼容性和自动强制转换。 更好的是,使用正确的已知类型。 除非您有100%可以真正用于任何类型的通用代码,否则不要使用Object。

希望有帮助! :) :)

注意:通用的强类型输入和类型转换仅存在于.java代码中。 编译为.class之后,我们剩下的是原始类型(Map和HashMap),没有通用类型参数,并且没有键和值的自动类型转换。 但这很有帮助,因为.java代码本身是强类型且简洁的。

Glen Best answered 2020-01-25T20:41:07Z

1 votes

以下内容将转换您现有的条目。

TransformedMap.decorateTransform(params, keyTransformer, valueTransformer)

在哪里

MapUtils.transformedMap(java.util.Map map, keyTransformer, valueTransformer)

仅将新条目转换为您的地图

yunspace answered 2020-01-25T20:41:35Z

1 votes

这里的解决方案很棒,只是考虑null832值处理的另一种选择:

Map map = new HashMap<>();

Map stringifiedMap = map.entrySet().stream()

.filter(m -> m.getKey() != null && m.getValue() !=null)

.collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));

Johnny answered 2020-01-25T20:46:01Z

0 votes

private Map convertAttributes(final Map attributes) {

final Map result = new HashMap();

for (final Map.Entry entry : attributes.entrySet()) {

result.put(entry.getKey(), String.valueOf(entry.getValue()));

}

return result;

}

Sky Tronics answered 2020-01-25T20:46:16Z

0 votes

使用Java 8将Map转换为Map的方法。此解决方案可处理null的值。

Map keysValuesStrings = keysValues.entrySet().stream()

.filter(entry -> entry.getValue() != null)

.collect(Collectors.toMap(Entry::getKey, entry -> entry.getValue().toString()));

BJ Peter DeLaCruz answered 2020-01-25T20:46:37Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gui 线程_如何在java中将消息从工作线程传递给GUI

您必须使用SwingUtilities.invokeLater&#xff0c;因为只能从事件派发线程访问Swing组件。这个方法的javadoc有一个关于线程的Swing教程的链接。点击此链接。这是一个例子&#xff1a;public class SwingWithThread {private JLabel label;// ...public void startBackgroundT…

java for each 原理_Java for each实现机制代码原理解析

源测试代码如下public class ForEachTest {public void test4Iterate(Iterable strings) {for (String str : strings) {System.out.println(str);}}public void test4Array(String[] strings) {for (String str : strings) {System.out.println(str);}}}执行编译命令javac For…

java输出九九乘法口诀表_java编程打印“九九乘法口诀表”的程序

其实就这几行代码&#xff0c;我大体意思已经写明白了&#xff0c;你还想知道什么&#xff0c;还是你没看懂这几行代码&#xff1f;/** main方法&#xff0c;一个java程序要运行&#xff0c;必须有这个方法&#xff0c;写法是固定的&#xff0c;记住就行了 */public static voi…

学java交学费包分配_java 学生缴学费案例:

/**学生缴学费案例: 学生类(Student)有两个字段: name(名字)和isFee(是否交学费的状态),有一个方法:交学费(fees)。每 一个学生都是通过student类new出来的一个对象,现在创建一个数组存放多个学生对象,再判断数组 中的学生是否已经缴费,如果没有,则学生的交学费方法。 */ //描述…

java web删除文件_Web开发为了java端程序能删除文件的解决办法

Web开发为了java端程序能删除文件&#xff0c;必须在.../jre/lib/security/java.policy文件中添加以下两个中的任何一段代码进去。注&#xff1a;必须是服务器的本地文件&#xff0c;局域网内的其他机器文件根本不能访问。一&#xff0c;grant codeBase "file:/d:/-"…

如何用java对接口发送请求_7. 用Java做接口测试1-发送HTTP请求和接收HTTP响应

前面的文章介绍了使用Postman、Fiddler做接口测试&#xff0c;现在咱们进入代码阶段。我会使用Java做示例&#xff0c;讲解如何使用Java做接口自动化测试。所以&#xff0c;这一部分需要一些Java代码基础&#xff0c;需要掌握java的代码结构、类、对象、接口、List、Map、多态等…

solr java浏览器访问_solr解决访问安全

Tomcat7&#xff0c;solr3.6&#xff0c;mmseg1.81&#xff1a;环境的搭建1&#xff1a;解压tomcat&#xff0c;solr&#xff0c;mmseg4j2&#xff1a;复制dist文件夹下apache-solr.war到tomcat的webapp文件夹下&#xff0c;修改文件名为solr(不该也行&#xff0c;这里修改文件…

java heap buffer direct buffer_java NIO - DirectBuffer 和 HeapBuffer

问题 &#xff1a;DirectBuffer 属于堆外存&#xff0c;那应该还是属于用户内存&#xff0c;而不是内核内存&#xff1f;FileChannel 的read(ByteBuffer dst)函数,write(ByteBuffer src)函数中&#xff0c;如果传入的参数是HeapBuffer类型,则会临时申请一块DirectBuffer,进行数…

yii2 提供接口给java_yii2写api接口步骤

yii2写api接口步骤Yii2如何实现RESTful风格的API(推荐&#xff1a;《YII教程》 )1、建立单独的应用程序为了增加程序的可维护性&#xff0c;易操作性&#xff0c;我们选择新建一套应用程序&#xff0c;这也是为了和前台应用、后台应用区分开操作。在WEB前端(frontend)和后端(ba…

java caller_js中的caller和callee属性

caller返回一个对函数的引用&#xff0c;该函数调用了当前函数。functionName.callerfunctionName 对象是所执行函数的名称。如果一个函数f是在全局作用域内被调用的,则f.caller为null,相反,如果一个函数是在另外一个函数作用域内被调用的,则f.caller指向调用它的那个函数.该属…

mysql 备份 php_PHP备份/还原MySQL数据库的代码

一、备份数据库并下载到本地// 设置SQL文件保存文件名$filenamedate("Y-m-d_H-i-s")."-".$cfg_dbname.".sql";// 所保存的文件名header("Content-disposition:filename".$filename);header("Content-type:application/octetstrea…

java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?...

当我在this question中提出时&#xff0c;gcc正在移除(是的&#xff0c;使用 -O0 )一行代码 _mm_div_ss(s1, s2); &#xff0c;大概是因为结果未保存 . 但是&#xff0c;这应该触发浮点异常并引发SIGFPE&#xff0c;如果删除调用则不会发生这种情况 .Question &#xff1a;是否…

java第二部分项目_Java_第二次作业:项目构思与实现

写在最前&#xff1a;我我我我我我靠&#xff0c;以后再也不再ddl截止前1小时调试程序了&#xff01;之前在DDL前1小时修改程序&#xff0c;当我改完后&#xff0c;我想着&#xff0c;再把之前的测试样例跑一遍&#xff0c;如果都对就OK了。就在这时&#xff0c;问题出现了&…

java远程插件动态注册机制_Spring运行时动态注册bean的方法

在spring运行时&#xff0c;动态的添加bean,dapeng框架在解析xml的字段时&#xff0c;使用到了动态注册&#xff0c;注册了一个实现了FactoryBean类&#xff01;定义一个没有被Spring管理的Controllerpublic class UserController implements InitializingBean{private UserSer…

java变量用来干嘛_Java

一、Maven的简介1、Maven是什么&#xff1f;Apache Maven是一个软件项目管理的综合工具。基于项目对象模型(POM)的概念&#xff0c;提供了帮助管理构建、文档、报告、依赖、发布等方法&#xff0c;Maven简化和标准化项目建设过程。处理编译&#xff0c;分配&#xff0c;文档&am…

mysql 视图 数据相加_MySQL

查看安装路径ps -ef|grep mysql1&#xff0c;配置linux虚拟机&#xff0c;修改IP????? vim /etc/sysconfig/network-scripts/ifcfg-eth02&#xff0c;配置完网卡之后&#xff0c;执行清空命令3&#xff0c;reboot查看生产环境上传文件MySQL5.5编译方式安装过程参考连接&am…

mllib协同过滤 java实现_协同过滤(ALS)算法介绍及Spark MLlib调用实例(Scala/Java/Python)...

协同过滤算法介绍&#xff1a;协同过滤常被用于推荐系统。这类技术目标在于填充“用户&#xff0d;商品”联系矩阵中的缺失项。Spark.ml目前支持基于模型的协同过滤&#xff0c;其中用户和商品以少量的潜在因子来描述&#xff0c;用以预测缺失项。Spark.ml使用交替最小二乘(ALS…

java编程启蒙_程序设计入门—Java语言

第一周&#xff1a;做点计算1.1 第一个程序如何下载、安装Eclipse和JRE&#xff0c;并且简单介绍一下这个软件的几个主要部分&#xff1b;如何在Eclipse中编辑、编译和运行程序&#xff1b;详解第一个程序&#xff1a;程序框架、输出、出错怎么办&#xff1b;做点计算&#xff…

python中什么是关键字参数_Python中的关键字参数

关键字参数与函数调用有关。在函数调用中使用关键字参数时&#xff0c;调用者通过参数名称标识参数。由于Python解释器能够使用提供的关键字来将值与参数进行匹配&#xff0c;因此您可以跳过参数或将其乱序放置。您还可以通过以下方式对printme()函数进行关键字调用-示例#!/usr…

java 任意代码执行漏洞_php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)...

目录0x01 漏洞介绍0x02 漏洞影响0x03 漏洞复现0x01 漏洞介绍在长亭科技举办的 Real World CTF 中&#xff0c;国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现&#xff0c;向目标服务器 URL 发送%0a符号时&#xff0c;服务返回异常&#xff0c;疑似存在漏洞。在nginx上…