java-如何使用Google Guava创建具有不变键且无重复的地图?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何使用Google Guava创建具有不变键且无重复的地图?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1933字,纯文字阅读大概需要3分钟。
内容图文
![java-如何使用Google Guava创建具有不变键且无重复的地图?](/upload/InfoBanner/zyjiaocheng/663/0e52356392024818b21189c1eaace72a.jpg)
我想使用Google Guava创建一个键/值映射结构,其中键不能修改,但值可以修改.我还希望能够使用谓词(或类似的东西)来迭代Map并仅检索那些具有值的条目.
例如,从概念上讲:
// start
Map data =
{Constants.KEY_NAME_1, Optional.absent()},
{Constants.KEY_NAME_2, Optional.absent()};
// succeeds
data.put(Constants.KEY_NAME_2, Optional.of("new_data"));
// finish
Map data =
{Constants.KEY_NAME_1, Optional.absent()},
{Constants.KEY_NAME_2, Optional("new_data")};
// fails
data.put(Constants.KEY_NAME_3, Optional.of("more_new_data"));
任何想法如何做到这一点?
——–解决方案——–
根据下面的评论,我选择了ForwardingMap.实现很简单
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ForwardingMap;
import com.google.common.collect.ImmutableList;
import java.util.Map;
Map<String, String> labelMap = ImmutableMap.<String, String> builder()
.put("KEY_1", "data1")
.put("KEY_2", "data2")
.build();
MyCustomMap<String> map = new MyCustomMap(labelMap);
public class MyCustomMap<String> extends ForwardingMap<String, String> {
private final Map<String, String> delegate;
private final ImmutableMap<String, String> immutableMap;
public MyCustomMap(Map<String, String> labelMap) {
/*
Check for duplicate values in the map here. The construction of
the ImmutableMap above ensures that there are no duplicate
keys. Otherwise it will throw
"IllegalArgumentException: Multiple entries with same key".
*/
delegate = labelMap;
immutableMap = ImmutableMap.<String, String>builder().putAll(delegate).build();
}
@Override
protected Map<String, String> delegate() {
return immutableMap;
}
}
解决方法:
如果您的钥匙不是一成不变的,番石榴将无法为您做任何事情;这是您必须确保自己的事情(通过确保所有键的类都是不可变的类).
甚至ImmutableMap也不能幸免于此类灾难:
// Modify the key
victim.keySet().iterator().next().alterMe();
如果您想做的是在插入/检索时自定义行为,则可以使用ForwardingMap包装另一个Map实例.
但是请注意,此类为您提供了很多自由,包括打破Map合同的自由,您显然应该避免这样做!
内容总结
以上是互联网集市为您收集整理的java-如何使用Google Guava创建具有不变键且无重复的地图?全部内容,希望文章能够帮你解决java-如何使用Google Guava创建具有不变键且无重复的地图?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。