如何使用流从 Map<UUID, List<Generator>> 获取我的对象(生成器)?
How to get my object (Generator) from a Map<UUID, List<Generator>> with streams?
我一直想检查我的生成器的位置并使用流来检查该位置是否有效。
当时的想法如下;
public Generator getGeneratorFromLocation(final Location location) {
for (List<Generator> generator : playerGeneratorMap.values()) {
for (Generator generator1 : generator) {
if (generator1.getGenLocation().equals(location)) {
return generator1;
}
}
}
return null;
}
我想 return 使用流从中生成一个生成器,而不是尝试学习更多的方法。
当前地图:
public final Map<UUID, List<Generator>> playerGeneratorMap = new HashMap<>();
如有任何帮助,我们将不胜感激。
您可以使用 AtomicRef 对象初始化 retVal,然后在 lambda 表达式中将所需的生成器分配给它,因为不能在 lambda 中分配常规变量,箭头函数中只能使用 final 或 effectivly final。
这个函数应该可以解决问题:)
public Generator getGeneratorFromLocation(final Location location) {
AtomicReference<Generator> retVal = new AtomicReference<>(null);
playerGeneratorMap.values().stream().forEach(generators -> {
generators.forEach(generator -> {
if (generator.getLocation().equals(location)) {
retVal.set(generator);
}
});
});
return retVal.get();
}
顺便说一句,流是不必要的,因为您有 Collection.forEach 而不是 Stream.forEach,流用于更多 'exotic' 类型的迭代,例如 filter、anyMatch、allMatch、reduce以及此类功能,您可以在 Oracle 的网站上阅读有关 Streams API 的信息,
我会 link 在文档中供您将来使用,这对函数式编程很重要。
我一直想检查我的生成器的位置并使用流来检查该位置是否有效。
当时的想法如下;
public Generator getGeneratorFromLocation(final Location location) {
for (List<Generator> generator : playerGeneratorMap.values()) {
for (Generator generator1 : generator) {
if (generator1.getGenLocation().equals(location)) {
return generator1;
}
}
}
return null;
}
我想 return 使用流从中生成一个生成器,而不是尝试学习更多的方法。
当前地图:
public final Map<UUID, List<Generator>> playerGeneratorMap = new HashMap<>();
如有任何帮助,我们将不胜感激。
您可以使用 AtomicRef 对象初始化 retVal,然后在 lambda 表达式中将所需的生成器分配给它,因为不能在 lambda 中分配常规变量,箭头函数中只能使用 final 或 effectivly final。
这个函数应该可以解决问题:)
public Generator getGeneratorFromLocation(final Location location) {
AtomicReference<Generator> retVal = new AtomicReference<>(null);
playerGeneratorMap.values().stream().forEach(generators -> {
generators.forEach(generator -> {
if (generator.getLocation().equals(location)) {
retVal.set(generator);
}
});
});
return retVal.get();
}
顺便说一句,流是不必要的,因为您有 Collection.forEach 而不是 Stream.forEach,流用于更多 'exotic' 类型的迭代,例如 filter、anyMatch、allMatch、reduce以及此类功能,您可以在 Oracle 的网站上阅读有关 Streams API 的信息, 我会 link 在文档中供您将来使用,这对函数式编程很重要。