簡體   English   中英

Java中的Where子句

[英]Where clause in Java

我有一個從數據庫加載的類Player:

public class Player{

    int id, score;
    String name;

    public Player(int id, String name, int score) {
        this.id = id;
        this.name = name;
        this.score = score
    }

    public int getID() {
        return id;
    }

    public String getName() {
        return name;
    }
    public String getScore() {
        return score;
    }
}

Main類將它們全部放在ArrayList<Player> player

是否可以使用類似於SQL中where子句的類找到該類的特定實例? 如果我有ID,我只需要這個名字。
例:

"SELECT name FROM Player WHERE id = 5";

不,但你可以讓你的Players保持在HashMap

HashMap<Integer,Player> players;

然后獲得所需的Player

Player player = players.get(5);

是的 其中一種方法是使用Apache Common Collections中的CollectionUtils.filter() “where子句”可以寫在Predicateevaluate()中。

有點喜歡這個:

CollectionUtils.filter(player, new Predicate() {
            public boolean evaluate(Object object) {
                return (((Player) object).getID() == 5 )
            }
});

然后播放器列表將只包含ID為5的Player對象

您可以遍歷您的Player集合,每次遇到player.getID() == 5您將其添加到另一個Player集合中。

例如:

List<Player> players = ...
List<Player> foundPlayers = new ArrayList<>();
for(Player player : players) {
    if(player.getID() == 5) {
        foundPlayers.add(player);
    }
}

編寫一個Filter類,它接受一個Collection並返回一個Collection:

public interface Filter<K, V> { 
    Collection<V> filter(Collection<K> unfiltered, Map parameters);
}

然后你可以做任何你喜歡的事情:

public class ByIdFilter<Person, String> implements Filter<Person, String> {
    public Collection<String> filter(<Collection<Person> persons, Map parameters) {
        // particulars here.

    }
}

也許.NET的LINQ將是一個很好的模型來調查和遵循。

您可以編寫一個方法來根據ID返回Player實例,如下所示:

private Player findPlayerById(int id) {
     for (Player p : player) {
          if (p.getId() == id) return p;
     }
     return null;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM