首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CharSequence更改为Set<CharSequence> & Map<CharSequence,Object>字符串

从CharSequence更改为Set<CharSequence> & Map<CharSequence,Object>字符串
EN

Stack Overflow用户
提问于 2013-11-01 12:26:07
回答 6查看 2.2K关注 0票数 1

场景1:

我从somewhere获得了一个,这意味着无法控制这个集合是如何创建的。

代码语言:javascript
复制
Set<CharSequence> dataSet = GET_DATA_SET();

我想将数据从Set<CharSequence>转换为Set<String>。是否有一种有效的方法来完成此转换而不对每个元素进行迭代?

场景2:

我还获得了另一个HashMap类型的数据(同样,我无法控制这个Map数据的创建部分):

代码语言:javascript
复制
Map<CharSequence, Car> dataMap = GET_DATA_MAP();

有没有一种有效的方法可以不用迭代就将这个映射转换成Map<String, Car>

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-11-01 12:31:58

正如提到的Eng.Fouad一样,并不是所有的CharSequence都是String

因此我们必须调用toString()方法。

只需使用:

代码语言:javascript
复制
 Set<CharSequence> dataSet = new HashSet<CharSequence>(Arrays.asList("a","b"));
    Set<String> output = new HashSet<String>();

    for(CharSequence c : dataSet){
        output.add(c.toString());
    }

很简单很清楚

票数 1
EN

Stack Overflow用户

发布于 2013-11-01 12:34:31

如果您确信该对象是String的,那么您可以执行(未检查的)强制转换,如果您的假设变得错误,您将得到一个ClassCastException

代码语言:javascript
复制
Map<CharSequence, Object> dataMap = new HashMap<>();
@SuppressWarnings("rawtypes")
Map untypedDataMap = dataMap;
@SuppressWarnings("unchecked")
Map<String, Object> stringDataMap = untypedDataMap;

请注意,这是相当危险的,特别是如果Map来自外部库。我会循环遍历Map,将每个CharSequence转换为一个String

您的问题是基于循环效率低下的假设,但您确定这一点吗?在你的案子里怎么会有问题呢?现代的编译器和硬件是非常高效的,很可能你甚至没有注意到一个循环的区别。

票数 1
EN

Stack Overflow用户

发布于 2013-11-01 12:32:56

如果确定没有非字符串对象,只需使用以下方法将对象转换为Set<String>

代码语言:javascript
复制
(Set<String>)((Object)dataSet);

示例:

代码语言:javascript
复制
(Set<String>)((Object)new HashSet<CharSequence>()));

但这是非常肮脏和不安全的伎俩。

编辑:正如@LaurentG所提到的,您可以

代码语言:javascript
复制
(Set<String>)((Set)dataSet);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19726737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档