Где пункт в Java - PullRequest
       25

Где пункт в Java

2 голосов
/ 11 марта 2012

У меня есть класс 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.

Можно ли найти конкретныйэкземпляр этого класса с чем-то похожим на предложение where в SQL?Мне просто нужно имя, если у меня есть удостоверение личности.Пример:

"SELECT name FROM Player WHERE id = 5";

Ответы [ 5 ]

4 голосов
/ 11 марта 2012

Нет, но вы можете оставить свой Players в HashMap:

HashMap<Integer,Player> players;

, а затем получить необходимое Player с:

Player player = players.get(5);
2 голосов
/ 11 марта 2012

Да. Одним из способов является использование CollectionUtils.filter () из общих коллекций Apache. «Где» может быть написано внутри evaluate() из Predicate.

Что-то нравится:

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

Тогда список игроков будет содержать только объект Player с идентификатором 5

1 голос
/ 11 марта 2012

Напишите класс Filter, который принимает коллекцию и возвращает коллекцию:

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.

    }
}

Возможно, LINQ из .NET будетхорошая модель для расследования и следования.

1 голос
/ 11 марта 2012

Вы можете перебрать свою коллекцию Player с, и каждый раз, когда вы сталкиваетесь с одной, где player.getID() == 5 вы добавляете ее в другую коллекцию Player с.

например:.

List<Player> players = ...
List<Player> foundPlayers = new ArrayList<>();
for(Player player : players) {
    if(player.getID() == 5) {
        foundPlayers.add(player);
    }
}
0 голосов
/ 11 марта 2012

Вы можете просто написать метод для возврата экземпляра Player на основе идентификатора, например:

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