Преобразование гуавы в Java 8 - PullRequest
0 голосов
/ 07 июня 2018

Я перевожу свои функции и предикаты Guava на Java 8. Непараметризованные предикаты просты, я просто переключаюсь с класса на интерфейс и помещаю «default» перед методом apply ().То, на чем я застрял - это параметризованные предикаты.Как я могу определить многократно параметризованный предикат в Java 8. Вот мой текущий код Guava:

import com.google.common.base.Predicate

public class InSectorPredicate implements Predicate<Unit> {
    private final SectorCoords coords;

    public InSectorPredicate(SectorCoords coords) {
        this.coords = coords;
    }

    @Override
    public boolean apply(Unit unit) {
        return unit.getCoords().equals(coords);
    }
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Интерфейсы не могут поддерживать состояние.Проблема в параметре координаты.

Но это не должен быть интерфейс?Вы можете просто использовать класс, как вы уже были.Или, черт возьми, пока вы находитесь в состоянии миграции, просто продолжайте использовать предикаты Гуавы, так как сигнатура типа Предиката Гуавы равна

public interface Predicate<T> extends java.util.function.Predicate<T> Так что они продолжат работать на Java 8

Из JD Предиката Гуавы:

  * <p>As this interface extends {@code java.util.function.Predicate}, an instance of this type may  
  * be used as a {@code Predicate} directly.  To use a {@code java.util.function.Predicate} where a  
  * {@code com.google.common.base.Predicate} is expected, use the method reference {@code  
  * predicate::test}.  

Пример кода, если вы хотите портировать.

public class InSectorPredicate8 implements java.util.function.Predicate<Unit> {
    private final SectorCoords coords;

    public InSectorPredicate8(SectorCoords coords) {
        this.coords = coords;
    }

    @Override
    public boolean test(Unit unit) {
        return unit.getCoords().equals(coords);
    }
}

Но, в зависимости от точного использования, большую часть времени вы будете создавать InSectorPredicate., вы могли бы просто сделать

Predicate<Unit> InSectorPredicate = new InSectorPredicate(coords);

мигрирует в

Predicate<Unit> InSectorPredicate = (Unit unit) -> unit.getCoords().equals(coords);
0 голосов
/ 07 июня 2018

Изменение apply на test не работает?

и, очевидно, заменить import com.google.common.base.Predicate; на import java.util.function.Predicate;

...