我是一个新的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.");
}
}
});
1条答案
按热度按时间lvmkulzt1#
observe
方法的第二个参数是一个函数接口,这就是为什么你可以在里面放一个lambda。它很可能是java.util.function包里的Consumer<T>
,因为它只需要一个参数beacons
。如果你想移除lambda(我猜你的意思是替换),你需要定义一个类来实现这个函数接口,比如:并给予
observe
一个类的示例:您还可以使用匿名接口实现以更内联的方式来实现,如下所示:
但是现在你看到如果不强迫的话,走这个弯路是没有意义的(阅读Java〈8),只要学习一点lambda语法,基本上是
() -> {}
,它就可以为你解决所有的麻烦。