Android Studio 删除lambda表达式

qf9go6mv  于 2023-01-31  发布在  Android
关注(0)|答案(1)|浏览(177)

我是一个新的lambda表达式,我有这个代码来扫描埃迪斯通信标,我想从它删除lambda表达式。我不知道他们是如何工作的。有人能帮忙吗?

beaconManager.getRegionViewModel(myRegion).getRangedBeacons().observe(this, beacons -> {
            noBeacons.setText(String.valueOf(beacons.size()));

            for (Beacon beacon : beacons) {
                if (uuids.contains(beacon))
                    continue;
                uuids.add(beacon);
                if (beacon.getServiceUuid() == 0xfeaa && beacon.getBeaconTypeCode() == 0x00) {
                    // This is a Eddystone-UID frame
                    Identifier namespaceId = beacon.getId1();
                    Identifier instanceId = beacon.getId2();
                    logthis("I see a beacon transmitting namespace id: " + namespaceId +
                            " and instance id: " + instanceId +
                            " approximately " + beacon.getDistance() + " meters away.");
                }
            }
        });
lvmkulzt

lvmkulzt1#

observe方法的第二个参数是一个函数接口,这就是为什么你可以在里面放一个lambda。它很可能是java.util.function包里的Consumer<T>,因为它只需要一个参数beacons。如果你想移除lambda(我猜你的意思是替换),你需要定义一个类来实现这个函数接口,比如:

class Helper implements Consumer<Beacon[]> {
    @Override
    public void accept​(Beacon[] beacons) {
        // lambda body here
    }
}

并给予observe一个类的示例:

beaconManager.getRegionViewModel(myRegion).getRangedBeacons().observe(this, new Helper());

您还可以使用匿名接口实现以更内联的方式来实现,如下所示:

beaconManager.getRegionViewModel(myRegion).getRangedBeacons().observe(this, new Consumer<Beacon[]>() {
    public void accept(Beacon[] beacons) {
        // lambda body here
    }
});

但是现在你看到如果不强迫的话,走这个弯路是没有意义的(阅读Java〈8),只要学习一点lambda语法,基本上是() -> {},它就可以为你解决所有的麻烦。

相关问题