gpt4 book ai didi

java - 如何重写这3个方法以使其可重用?

转载 作者:行者123 更新时间:2023-12-01 11:33:02 25 4
gpt4 key购买 nike

我正在制作一款坦克游戏。在我的PlayPanel我编写了这段代码,正如你所看到的,它大部分是相同的,但它用于 3 个不同的 ArrayList s。

我真的很想知道如何只编写一次这个方法,以便对所有 ArrayList 重用它。因为它看起来很不整洁。

//obstacles
for (int i = 0 ; i<obstacles.size() ; i++) {
if (obstacles.get(i).dood)
obstacles.remove(i);
}
//bullets
for (int i = 0; i< bullets.size(); i++) {
bullets.get(i).redraw();
//de positie van elke kogel wordt geupdate.
if(bullets.get(i).OutOfScreen()) {
bullets.remove(i);//uit scherm -> verwijdert en verplaatst
}
}

for (int i = 0; i< enemyBullets.size(); i++) {
enemyBullets.get(i).redraw();
if(enemyBullets.get(i).OutOfScreen()) {
enemyBullets.remove(i);
}
}

我想写这个,但似乎不太合适:

public void remove(ArrayList object) {
for (int i = 0; i< object.size(); i++) {
object.get(i).redraw();
if(object.get(i).OutOfScreen()) {
object.remove(i);
}
}
}

此外,我真的不知道如何调用此方法以将其用于 ArrayList 之一s。

最佳答案

如果您使用 Java 8,则可以通过传递 Predicate 来过滤列表。 .

public class Helper {
//removePredicate can be any function that returns a boolean that will help
//to filter the data
static <T> void remove(List<T> list, Predicate<? super T> removePredicate) {
List<T> filteredList = list.stream()
.filter(removePredicate)
.collect(Collectors.toList());
list.clear();
list.addAll(filteredList);
}
}

以下是如何使用上述方法 List<Bullet> 的示例:

//sample implementation for Bullet class
class Bullet {
int value;
public Bullet(int value) { this.value = value; }
public boolean outOfScreen() {
return value > 10;
}
@Override public String toString() {
return String.format("Bullet: {%d}", value);
}
}

//somewhere you need to execute this code...
//initialize your List
List<Bullet> bulletList = new ArrayList<>(Arrays.asList(
new Bullet(15), new Bullet(1), new Bullet(20), new Bullet(6)));
//show the contents of the list
System.out.println(bulletList);
//remove the elements by using whatever you want/need
//see how you can pass any way to filter the elements of the list
Helper.remove(bulletList, b -> !b.outOfScreen());
//show the contents of the list again to show how it was filtered
System.out.println(bulletList);

使用这种方法的好处是您不需要类继承或类似的东西。

关于java - 如何重写这3个方法以使其可重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com