作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一款坦克游戏。在我的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/
我是一名优秀的程序员,十分优秀!