Обработка смежных перекрывающихся пар из потока java - PullRequest
1 голос
/ 10 июля 2020

Я работаю над проблемой, связанной с обработкой перекрывающихся пар из потока.

например, рассмотрим список → [«лев», «лиса», «заяц», «морковь»] . Таким образом, вывод будет

лев ест лису

лиса ест зайца

заяц ест морковь.

Элементы вывода всегда на единицу меньше, чем в исходном списке . Сейчас я использую java 8. вот мой код

Код

static <T,R> Function <T, Stream<R>> pairMap(BiFunction<T,T,R> mapper) 
    {
        return new Function<> () {
            T previous = null;
            boolean hasPrevious;

            public Stream<R> apply(T t)
            {
                Stream<R> result;
                if(!hasPrevious)
                {
                    hasPrevious = true;
                    result = Stream.empty();
                }
                else
                {
                    result = Stream.of(mapper.apply(previous, t));
                }
                previous = t;
                return result;
            }
        };
    }
    static <T> Stream<T> getAdjecentOverlappingStream(List<T> list)
    {
        return list.stream().flatMap(pairMap((a,b) -> a+" eats "+ b));
    }

Метод вызова

//consider the class name I am working with is StreamUtils.  
StreamUtils.getAdjecentOverlappingStream(Arrays.asList("lion","fox","hare","carrot"))
.forEach(System.out::println);;

Но этот код дает мне ошибку как ошибка: невозможно определить аргументы типа для функции

Показать полную ошибку.

Ошибка

StreamLecture.java:83: error: cannot infer type arguments for Function<T,R>
        return new Function<> () {
                           ^
  reason: cannot use '<>' with anonymous inner classes
  where T,R are type-variables:
    T extends Object declared in interface Function
    R extends Object declared in interface Function
StreamLecture.java:106: error: incompatible types: inference variable R#1 has incompatible bounds
        return list.stream().flatMap(pairMap((a,b) -> a+" eats "+ b));
                                    ^
    equality constraints: T#2
    lower bounds: String,R#2
  where R#1,T#1,T#2,R#2,T#3 are type-variables:
    R#1 extends Object declared in method <R#1>flatMap(Function<? super T#1,? extends Stream<? extends R#1>>)
    T#1 extends Object declared in interface Stream
    T#2 extends Object declared in method <T#2>getAdjecentOverlappingStream(List<T#2>)
    R#2 extends Object declared in method <T#3,R#2>pairMap(BiFunction<T#3,T#3,R#2>)
    T#3 extends Object declared in method <T#3,R#2>pairMap(BiFunction<T#3,T#3,R#2>)
Note: StreamLecture.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

Пожалуйста, помогите мне исправить эту ошибку. спасибо ✌

...