Правильный ответ:
select table_record_id,
group_concat(if(value_name='note', value_text, NULL)) as note
,group_concat(if(value_name='hire_date', value_text, NULL)) as hire_date
,group_concat(if(value_name='termination_date', value_text, NULL)) as termination_date
,group_concat(if(value_name='department', value_text, NULL)) as department
,group_concat(if(value_name='reporting_to', value_text, NULL)) as reporting_to
,group_concat(if(value_name='shift_start_time', value_text, NULL)) as shift_start_time
,group_concat(if(value_name='shift_end_time', value_text, NULL)) as shift_end_time
from other_value
where table_name = 'employee'
and is_active = 'y'
and is_deleted = 'n'
GROUP BY table_record_id
Я действительно не думаю, что вам нужно перебирать весь список массивов, чтобы найти, содержится ли в нем элемент.
Это:
for(String s: SoccerNames) {
if(s.contains(findString)) {
nList.add(s);
}
}
Может быть заменено на это:
if(nList.contains(findString)) {
nList.add(s);
}
Затем вы можете выполнить цикл по bigArray
и сделать что-то похожее для каждого из списков массивов по порядку. отображать определенное имя.
Кроме того, я думаю, что вы должны использовать класс с несколькими полями для ваших спортсменов.
Это может быть что-то вроде этого:
public class Athlete {
private String name;
private Sport sport;
public Athlete(String name, Sport sport) {
this.name = name;
this.sport = sport;
}
public String getName() {
return name;
}
public Sport getSport() {
return sport;
}
}
Или создать несколько реализаций интерфейса Athete, например:
Volleyballist extends Atlete // or implements
Так что вы можете использовать только один ArrayList и храните там всех своих спортсменов и ищите в них.
В том, как вы подходите к проблеме, я думаю, что лучшее решение - это составить список, выбирая для него значения трех других, а затем выполнить поиск.
private void lookingFor(String player){
ArrayList<String> all = new ArrayList<String>();
all.addAll(SoccerNames);
all.addAll(FootballNames);
all.addAll(VolleyballNames);
for(String a : all) {
if(player == a) {
bigList.add(a);
break;
}
}
}
Я не проверял это. Но я думаю, что вы должны создать класс игроков с его именем, идентификатором и видом спорта, которым он занимается, и вместо этого выбрать с этим атрибутом. Таким образом, вы даже можете создать один список вместо четырех.
public class Player {
private Integer id;
private String name;
private String sport;
public Player() {
// TODO Auto-generated constructor stub
}
public Player(Integer id, String name, String sport) {
super();
this.id = id;
this.name = name;
this.sport = sport;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSport() {
return sport;
}
public void setSport(String sport) {
this.sport = sport;
}
}
А потом:
ArrayList<Player> players;
ArrayList<Player> bigList;
private void filterPlayer(String name){
for(Player p : players){
if(p.getName() == name){
bigList.add(p);
break;
}
}
}
Прежде всего, не используйте списки. Используйте наборы - они не допускают повторения, и я уверен, что вам не нужна возможность иметь игрока в одном и том же списке дважды (держу пари, что в вашем домене это не имеет смысла).
В наборе есть метод contains
, который сообщает вам, содержится ли элемент в наборе или нет - без каких-либо циклов.
Тогда, если вы хотите иметь возможность определить, в каком из наборов содержится игрок (например, был ли он в футболе, футболе или волейболе), не повторяя этот конкретный вид спорта - вы можете поместить эти наборы в Map
где String
со спортивным именем будет ключом, а Set<String>
будет значением.
И да, не давайте локальных переменных именам полей, начинающимся с заглавной буквы - это противоречит соглашениям Java-кода.
Пример кода:
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
public class Test {
Map<String, Set<String>> sportsToPlayers = new LinkedHashMap<>();
public void populatePlayers() {
Set<String> footballPlayers = new LinkedHashSet<>();
Set<String> volleyballPlayers = new LinkedHashSet<>();
Set<String> soccerPlayers = new LinkedHashSet<>();
footballPlayers.add("Marcus Allen");
footballPlayers.add("Kyle Alston");
footballPlayers.add("Troy Apke");
footballPlayers.add("Matthew Baney");
footballPlayers.add("Saquon Barkley");
volleyballPlayers.add("Kendall White");
volleyballPlayers.add("Kaitlyn Hord");
volleyballPlayers.add("Bryanna Weiskircher");
volleyballPlayers.add("Nia Reed");
volleyballPlayers.add("Serena Gray");
volleyballPlayers.add("Alli Frantti");
// Added to test for multiple sports for 1 player
volleyballPlayers.add("Kat Asman");
soccerPlayers.add("Amanda Dennis");
soccerPlayers.add("Emily Ogle");
soccerPlayers.add("Ellie Jean");
soccerPlayers.add("Kat Asman");
soccerPlayers.add("Laura Suero");
sportsToPlayers.put("Football", footballPlayers);
sportsToPlayers.put("Volleyball", volleyballPlayers);
sportsToPlayers.put("Soccer", soccerPlayers);
}
private Set<String> findPlayerSports(String playerName) {
Set<String> result = new LinkedHashSet<>();
for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
String sportName = sportsToPlayersEntry.getKey();
Set<String> playerNames = sportsToPlayersEntry.getValue();
if (playerNames.contains(playerName)) {
result.add(sportName);
}
}
return result;
}
private String findPlayerSport(String playerName) {
for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
String sportName = sportsToPlayersEntry.getKey();
Set<String> playerNames = sportsToPlayersEntry.getValue();
if (playerNames.contains(playerName)) {
return sportName;
}
}
return null;
}
public Test() {
populatePlayers();
}
public static void main(String[] args) throws Exception {
Test test = new Test();
// Find all sports for player
System.out.println(test.findPlayerSports("Kat Asman"));
// Find one sport for player
System.out.println(test.findPlayerSport("Kat Asman"));
}
}
ArrayList<String> nList = new ArrayList<String>();
String findString = "Kat Asman";
List<String> lst = new ArrayList(Arrays.asList(SoccerNames));
lst.addAll(Arrays.asList(FootballNames));
lst.addAll(Arrays.asList(VolleyballNames));
for(String s: lst){
if(s.contains(findString)){
nList.add(s);
}
System.out.println(nList);
}
Вы можете использовать метод Объединение более одного массива в один массив / список , так что вы можете выполнить через все три массива всего за один цикл .
Надеюсь, что работает.