我正在學習如何在Java 8中使用Streams,並希望瞭解如何將以下示例轉換爲基於流的方式。我做了幾次嘗試,但無法獲得基於流的方式進行編譯。我想我正在被嵌套循環和變量引用絆倒,這些引用似乎丟失了。將邏輯轉換爲使用Java 8流
import java.util.Collection;
import java.util.Objects;
import gov.geo.argcci.product.parts.layers.PlatformMarkerLayer;
public class Test {
public void java7Method(final Collection<Item> items) {
for (final LayerHolder layerHolder : getLayerHolders()) {
if (layerHolder.getLayer() instanceof MyLayer) {
final MyLayer myLayer = (MyLayer) layerHolder.getLayer();
final Item current = myLayer.getItem();
if (current != null) {
for (final Item item : items) {
if (Objects.equals(item.getSomeKey(), current.getSomeKey())
&& Objects.equals(item.getSomeOtherKey(), current.getSomeOtherKey())) {
final SomeObject someObject = getObjectBasedOnItem(current);
someObject.doSomething(layerHolder);
}
}
}
}
}
}
public void java8Method(final Collection<Item> items) {
getLayerHolders()
.stream()
.filter(layerHolder -> layerHolder.getLayer() instanceof MyLayer)
.map(layerHolder -> (MyLayer) layerHolder.getLayer())
.map(layerHolder -> layerHolder.getItem())
.filter(Objects::nonNull)
.forEach(current->{
items.stream()
.filter(Objects.equals(item.getSomeKey(), current.getSomeKey()) && Objects.equals(item.getSomeOtherKey(), current.getSomeOtherKey()));
// final SomeObject someObject = getObjectBasedOnItem(current);
// someObject.doSomething(layerHolder);
});
}
// The Code below this line is auto-generated to make sure example can compile without errors
private SomeObject getObjectBasedOnItem(Item current) {
return null;
}
private Collection<LayerHolder> getLayerHolders() {
return null;
}
private class Item {
public Object getSomeKey() {
return null;
}
public Object getSomeOtherKey() {
return null;
}
}
private class LayerHolder {
public MyLayer getLayer() {
return null;
}
}
private class MyLayer {
public Item getItem() {
return null;
}
}
private class SomeObject {
public void doSomething(LayerHolder layerHolder) {}
}
}
你有什麼錯誤? – randominstanceOfLivingThing
在你的第二個過濾器中,你只需要添加'item - >'使其成爲一個lambda – njzk2