如何将Guava转换到Java 8?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (214)

我正在将Guava转换到Java 8,我只需从一个类更改到另一个接口,并将一个“默认”放在application()方法的前面以下是我的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);
    }
}
提问于
用户回答回答于

你可以像以前一样简单地使用一个类,当你处于迁移状态时,只需继续使用Guava的类型签名

public interface Predicate<T> extends java.util.function.Predicate<T>:

  * <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);
用户回答回答于

将apply转换到test不起作用?因为代码中明显地取代了import com.google.common.base.Predicate;和import java.util.function.Predicate;

扫码关注云+社区

领取腾讯云代金券