[英]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子句”可以寫在Predicate
的evaluate()
中。
有點喜歡這個:
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.