处理来自java流的相邻重叠对

处理来自java流的相邻重叠对,java,java-8,java-stream,Java,Java 8,Java Stream,我正在处理一个需要处理流中重叠对的问题 例如,考虑列表→ [“狮子”、“狐狸”、“兔子”、“胡萝卜”]。 因此,输出将是 狮子吃狐狸 狐狸吃兔子 兔子吃胡萝卜 输出项总是比原始列表的项少一个。我目前正在使用Java8。这是我的密码 代码 静态函数pairMap(双函数映射器) { 返回新函数(){ T previous=null; 布尔hasPrevious; 公共流应用(T) { 流结果; 如果(!hasPrevious) { hasPrevious=true; 结果=Stream.empty

我正在处理一个需要处理流中重叠对的问题

例如,考虑列表→ [“狮子”、“狐狸”、“兔子”、“胡萝卜”]。 因此,输出将是

狮子吃狐狸

狐狸吃兔子

兔子吃胡萝卜

输出项总是比原始列表的项少一个。我目前正在使用Java8。这是我的密码

代码

静态函数pairMap(双函数映射器)
{
返回新函数(){
T previous=null;
布尔hasPrevious;
公共流应用(T)
{
流结果;
如果(!hasPrevious)
{
hasPrevious=true;
结果=Stream.empty();
}
其他的
{
结果=Stream.of(mapper.apply(previous,t));
}
先前=t;
返回结果;
}
};
}
静态流GetAdjaceEntOverlappingStream(列表)
{
return list.stream().flatMap(pairMap((a,b)->a+“eats”+b));
}
调用方法

//考虑一下我使用的类名是StreamUtils。
StreamUtils.getAdjaceEntOverlappingStream(Arrays.asList(“lion”、“fox”、“hare”、“carrot”))
.forEach(System.out::println);;
但是这段代码给我的错误是错误:无法推断函数的类型参数

请参阅完整错误

错误

streamteaching.java:83:错误:无法推断函数的类型参数
返回新函数(){
^
原因:无法对匿名内部类使用“”
其中T,R是类型变量:
T扩展接口函数中声明的对象
R扩展接口函数中声明的对象
java:106:错误:不兼容类型:推理变量R#1的边界不兼容
return list.stream().flatMap(pairMap((a,b)->a+“eats”+b));
^
等式约束:T#2
下限:字符串,R#2
其中,R#1,T#1,T#2,R#2,T#3是类型变量:

R#1扩展了在方法flatMap中声明的对象(FunctionJust use
new Function
,在Java 11+中,您不需要它。在修复您所说的错误后,调用方法也会给我这个错误:不兼容的类型:推理变量R#1具有不兼容的边界返回列表。stream().flatMap(pairMap((a,b)->+“eats”+b));正如您在
流中需要的那样
然后像
(Stream)list.Stream()…
一样将其强制转换为list.Stream().flatMap((Stream)pairMap((a,b)->a+“eats”+b));?因为
(a,b)->a+“eats”+b
求值为
字符串
,您应该将返回类型声明为
。不要强制转换为
,对于这一个调用方,
T
恰好是
字符串
,但下一个调用方可能会传入
列表
,并且该方法在使用strin时不应假装返回
g串联。只需使用
新函数
,在Java 11+中,您不需要它。在修复您所说的错误后,调用方法也会给我这个错误:不兼容类型:推理变量R#1具有不兼容的边界返回列表。stream().flatMap(pairMap((a,b)->a+“eats”+b));正如您在
流中需要的那样
然后像
(Stream)list.Stream()…
一样将其强制转换为list.Stream().flatMap((Stream)pairMap((a,b)->a+“eats”+b));?因为
(a,b)->a+“eats”+b
求值为
字符串
,您应该将返回类型声明为
。不要强制转换为
,对于这一个调用方,
T
恰好是
字符串
,但下一个调用方可能会传入
列表
,并且该方法在使用strin时不应假装返回
g串联。