发布于2021-09-19 22:48 阅读(330) 评论(0) 点赞(5) 收藏(0)
import java.util.*;
import java.util.stream.*;
class Playground {
public static void main(String[] args)
{
// Creating a character array
char arr[] = { '1', '2', '3', '4', '5' };
// --------- Using Stream.of() ---------
// Will work efficiently
// to convert int array into Stream
Stream<char[]> stream = Stream.of(arr);
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a));
// Displaying elements in Stream
s.forEach(str -> System.out.print(str + " "));
}
}
我正在尝试使用 flatMap() 将 char[] 转换为字符流,但出现以下错误
./Playground/Playground.java:14: error: incompatible types: inference variable R has incompatible bounds
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a));
^
equality constraints: Integer
lower bounds: U,Character
where R,T,U are type-variables:
R extends Object declared in method <R>flatMap(Function<? super T,? extends Stream<? extends R>>)
T extends Object declared in interface Stream
U extends Object declared in method <U>mapToObj(IntFunction<? extends U>)
1 error
需要帮助了解错误以及如何完成此任务。具体如何使用 flatMap() 从 char[] 到 Character 流修复这行代码。
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a))
编辑:所以问题原来不是关于 Stream 而是关于 lambda 表达式,我在不小心修复了 lambda 表达式后抽搐了线路并弄乱了打字。原来的线路是
Stream<Character> s = stream.flatMap(item->{new String(item).chars().mapToObj(a->(char)a);});
问题是在 {} 中缺少 return 语句。然后我把这条线改成
Stream<Integer> s = stream.flatMap((item)->new String(item).chars())
因为我认为 IntStream::mapToObj 引起了麻烦,但是我最后忘记了 boxed() 并得到了另一个类型错误,所以我重新添加了 IntStream::mapToObj 并发布了问题,但忘记将 Stream 类型改回 Character。我很困惑,但现在迷雾散去。谢谢你的好答案。
您已使用Stream<Integer>
代替Stream<Character>
. 如果要使用Stream<Integer>
,则需要使用IntStream::boxed或mapToObj(a -> Integer.valueOf(a))
如下所示:
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
char arr[] = { '1', '2', '3', '4', '5' };
Stream<char[]> stream1 = Stream.of(arr);
Stream<Character> chars = stream1.flatMap(item -> new String(item).chars().mapToObj(a -> (char) a));
chars.forEach(c -> System.out.print(c + " "));
System.out.println();
Stream<char[]> stream2 = Stream.of(arr);
Stream<Integer> ints = stream2.flatMap(item -> new String(item).chars().boxed());
ints.forEach(i -> System.out.print(i + " "));
System.out.println();
Stream<char[]> stream3 = Stream.of(arr);
Stream<Integer> integers = stream3.flatMap(item -> new String(item).chars().mapToObj(a -> Integer.valueOf(a)));
integers.forEach(i -> System.out.print(i + " "));
}
}
输出:
1 2 3 4 5
49 50 51 52 53
49 50 51 52 53
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/289999/e8dd6c58b31424aaf641/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!