我有ArrayList<Game>
,我的对象游戏包含Date
,Opponent
,Score
以及其他计算10个元素的字段。
有时Score
可能是null
如何检查并将其更改为某个默认值?
我尝试了以下内容:
for(Game a : arrList)
{
if(a.getScore() == null)
{
}
}
我需要做if(..)
10次,还是有另一种更快的方式?
答案 0 :(得分:2)
在您的课程游戏中,您可以为分数设置默认值:
class Game{
private Score score;
public Score getScore(){
return this.score == null? this.score : new Score();
}
}
供您参考: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5
每个类变量,实例变量或数组组件都是 在创建时使用默认值初始化(§15.9,§15.10.2):
对于type byte,默认值为零,即值 (字节)0
对于type short,默认值为零,即值 (短)0
对于int类型,默认值为零,即0。
对于long类型,默认值为零,即0L。
对于float类型,默认值为正零,即0.0f。
对于double类型,默认值为正零,即0.0d。
对于char类型,默认值为空字符,即 '\ u0000的'。
对于类型boolean,默认值为false。
对于所有引用类型(§4.3),默认值为null。
在您的课程游戏中,您可以为分数设置默认值:
修改强>
class Game{
private Score score;
public Score getScore(){
return this.score;
}
public void setScore(Score score){
this.score = score;
}
public Score getScoreOrDefault(Score default){
if(Objects.isNull(this.score)){
setScore(default);
return default;
}
}
}
之后,您可以在传递新分数作为参数时调用getScoreOrDefault:
答案 1 :(得分:1)
我认为您正在以正确的方式进行,但如果您想要更高的性能,那么您可以在ternary operators
内使用loop
,如下所示
(a.getScore()==null)? a.setScore("value"):do nothing;
答案 2 :(得分:1)
您可以更新getScore()
中的Game
方法以返回Optional<Score>
:
public Optional<Score> getScore() {
return Optional.ofNullable(score);
}
然后,当您调用它时,您可以将ifPresent
与Consumer
:
如果存在值,则使用该值调用指定的使用者, 否则什么都不做。
game.getScore().ifPresent(score ->
System.out.println("This is only executed if the value is present!"));
示例强>
public class Game {
private Score score;
private String name;
public Game(String name) { this.name = name;}
public Game(String name, Integer scoreVal) {
this.name = name;
score = new Score(scoreVal);
}
public String getName() { return name; }
public Optional<Score> getScore() {
return Optional.ofNullable(score);
}
public static void main(String[] args) {
List<Game> games = new ArrayList<Game>();
games.add(new Game("Game 1"));
games.add(new Game("Game 2", 10));
for(Game game: games) {
game.getScore().ifPresent(score ->
System.out.println("Score value in " + game.getName() + " is " + score.getValue()));
}
}
}
class Score {
private Integer value = 0;
public Score(Integer val) { value = val; }
public Integer getValue() { return value; }
}
输出
Score value in Game 2 is 10
答案 3 :(得分:0)
Using Java 8 Syntax
via this way you can check in list which fastest
arrList
.stream()
.filter(p-> p.getscore()==null)