使用流java8基于条件修改HashMap
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用流java8基于条件修改HashMap,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2019字,纯文字阅读大概需要3分钟。
内容图文
我想创建一个HashMap< String,Integer>来自现有的HashMap< String,Integer>通过对Map的键应用一些操作.
假设我有一个String->
String sampleString= "SOSSQRSOP";`
然后通过从下面的字符串中只取3个字符(将0作为值)创建一个hashmap:
Map<String, Integer> messages= new HashMap<>();
messages.put("SOS",0);
messages.put("SQR",0);
messages.put("SOP",0);
实际任务是使用映射中的每个键从给定字符串“SOS”中查找不同字符的总数,并将no指定给每个键的值.
如下(最终结果):
Map<String, Integer> messages= new HashMap<>();
messages.put("SOS",0);
messages.put("SQR",2);
messages.put("SOP",1);
所以我使用下面给出的流在java8中编写代码:
Map<String,Integer> result= messages
.entrySet().stream()
.collect(Collectors.toMap(e-> e.getKey(),
e-> e.getKey().stream()
.forEach(x-> {
if(!"SOS".equals(x)){
char[] characters= {'S','O','S'};
char[] message= x.toCharArray();
for(int i=0; i< characters.length;i++){
int index=0;
if(characters[i] != message[i]){
messages.put(e.getKey(),++index);
}
}
}
});
));
我收到编译错误.任何人都可以帮助我使用流编写代码.
编辑:还请描述其他方法来做到这一点.在我的例子中,BTW需要从给定的字符串创建第一个hashmap.
解决方法:
没有必要预先制作HashMap.流收集器toMap将为您提供:
import static java.util.stream.Collectors.toMap;
Map<String, Integer> result = Stream.of("SOS", "SQR", "SOP")
.collect(toMap(
s -> s,
s -> (int) IntStream.range(0, 3)
.filter(i -> "SOS".charAt(i) != s.charAt(i)) // assume all words are 3-letters
.count()
));
但是,如果您已有地图并想要修改它,请使用replaceAll:
messages.replaceAll(
(s, unused) -> (int) IntStream.range(0, 3)
.filter(i -> "SOS".charAt(i) != s.charAt(i))
.count()
);
如果您的任务是拆分源消息并将每个三元组与前三个字符进行比较,则可以将它们组合在一个流表达式中:
String message = "SOSSQRSOP";
int n = 3;
assert message.length() % n == 0;
Map<String, Integer> messages = IntStream.range(0, message.length() / n)
.map(i -> i * n) // starting points of the n-grams
.mapToObj(idx -> message.substring(idx, idx + n))
.collect(toMap(
group -> group,
group -> (int) IntStream.range(0, n)
.filter(i -> message.charAt(i) != group.charAt(i))
.count()
));
内容总结
以上是互联网集市为您收集整理的使用流java8基于条件修改HashMap全部内容,希望文章能够帮你解决使用流java8基于条件修改HashMap所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。