移除Java代码中的Lambda表达式:Eddystone Beacon扫描代码改造求助
移除Lambda表达式的替代实现
你这段代码里的Lambda表达式是用来实现Observer<List<Beacon>>接口的onChanged方法,核心作用是监听Beacon扫描结果的变化。下面是去掉Lambda后的等价代码:
beaconManager.getRegionViewModel(myRegion).getRangedBeacons().observe(this, new Observer<List<Beacon>>() { @Override public void onChanged(List<Beacon> 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."); } } } });
关键说明:
- 原代码里的
beacons -> { ... }Lambda,本质是Java 8+对单方法接口(函数式接口)的简化写法,这里简化了Observer接口的匿名内部类实现 - 替换后的匿名内部类需要显式声明实现
Observer<List<Beacon>>,并重写唯一的抽象方法onChanged onChanged方法的参数beacons和原Lambda的参数完全对应,方法体代码和原Lambda里的逻辑完全一致
内容的提问来源于stack exchange,提问作者Chris Costa
相关产品推荐
相关产品推荐

