加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Streams:Streams中的map如何工作

发布时间:2020-12-15 04:36:55 所属栏目:Java 来源:网络整理
导读:为了更好地理解Streams中的map函数,我尝试了这样的事情: String inputString="1+3+5";Stream.of(inputString.split("+")).map( eachStringLiteral - { output += mapOfStringAndNumber.get(eachStringLiteral) + literal; }); inputString是: String inp
为了更好地理解Streams中的map函数,我尝试了这样的事情:

String inputString="1+3+5";
Stream.of(inputString.split("+")).map(
    eachStringLiteral -> {
        output += mapOfStringAndNumber.get(eachStringLiteral) + literal;
    }
);

inputString是:

String inputString = "1+3+5";

然而,编译器抱怨并且我不知道为什么:

The method map(Function) in the type
Stream is not applicable for the arguments ((
eachStringLiteral) -> {})

我还需要一些帮助才能理解语法

功能&LT ;?超级弦,?延伸R>.

更新

这是完整的代码,说明了我想要实现的目标:

HashMap<String,Double> mapOfStringAndNumber=new HashMap<String,Double>();

        mapOfStringAndNumber.put("1",270.5);
        mapOfStringAndNumber.put("2",377.5);
        mapOfStringAndNumber.put("3",377.5);
        String inputString="1+3+5";
        String literal="+";
       String output;
      java.util.stream.Stream.of(inputString.split("+")).map(eachStringLiteral->
      output+=mapOfStringAndNumber.get(eachStringLiteral)+literal

解决方法

假设您为map mapOfStringAndNumber中的每个输入字符串提供Double值,您可以使用 Pattern#splitAsStream(CharSequence input)直接将输入字符串拆分为Stream,并使用 Collectors.joining(CharSequence delimiter)以as分隔符构建输出,因此您的最终代码可能是:

Map<String,Double> mapOfStringAndNumber = new HashMap<>();
mapOfStringAndNumber.put("1",270.5);
mapOfStringAndNumber.put("3",377.5);
mapOfStringAndNumber.put("5",377.5);
String inputString = "1+3+5";
String output = Pattern.compile("+")
    .splitAsStream(inputString)
    .map(mapOfStringAndNumber::get)
    .map(d -> Double.toString(d))
    .collect(Collectors.joining("+"));

System.out.println(output);

输出:

270.5+377.5+377.5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读