Примечание: Маленький длинный вопрос. Я собираюсь дать щедрость за лучший ответ.
То, что я пытаюсь сделать, это запрос объекта. Вот подробности. У меня есть файл с именем employee.txt
. Поэтому я проанализировал его и сохранил в списке
public static List<Employee> employeeList = new LinkedList<>();
Тогда вот моя логика для запроса.
Возьмите запрос от пользователя, а затем проанализируйте его. Ниже приведена логика запроса через список.
Для примера: вот запрос
select * from Employee where id > 10
Мои коды для этого
String valueToCompare = split[5]; //10
EmployeeCriteria criteria = new EmployeeCriteria(
isId, isName, isSalary, expression,
valueToCompare);
result = EmployeeData.findAll(
EmployeeData.employeeList, criteria);
Вот метод findAll
public static List<Employee> findAll(List<Employee> coll,
ISearch<Employee> chk) {
List<Employee> l = new LinkedList<Employee>();
for (Employee obj : coll) {
if (chk.search(new Employee(obj)))
l.add(obj);
}
return l;
}
И вот мой метод поиска
/**
* Based on the type provided and for given expression it check against the
* given value
*/
@Override
public boolean search(Employee obj) {
if (expression.equals(EQUAL)) {
if (isId()) {
if (obj.getId() == Long.parseLong(valueToCompare)) {
return true;
}
} else if (isName()) {
if (obj.getName().equals(valueToCompare)) {
return true;
}
} else if (isSalary()) {
if (obj.getSalary() == Long.parseLong(valueToCompare)) {
return true;
}
} else {
System.err.println(UserMessage.INVALIDCOLUMN_NAME);
}
} else if (expression.equals(NOT_EQUAL)) {
if (isId()) {
if (!(obj.getId() == Long.parseLong(valueToCompare))) {
return true;
}
} else if (isName()) {
if (!(obj.getName().equals(valueToCompare))) {
return true;
}
} else if (isSalary()) {
if (!(obj.getSalary() == Long.parseLong(valueToCompare))) {
return true;
}
} else {
System.err.println(UserMessage.INVALIDCOLUMN_NAME);
}
} else if (expression.equals(GREATER)) {
if (isId()) {
if ((obj.getId() > Long.parseLong(valueToCompare))) {
return true;
}
} else if (isSalary()) {
if ((obj.getSalary() > Long.parseLong(valueToCompare))) {
return true;
}
} else {
System.err.println(UserMessage.INVALIDCOLUMN_NAME);
}
} else if (expression.equals(LESSER)) {
if (isId()) {
if ((obj.getId() < Long.parseLong(valueToCompare))) {
return true;
}
} else if (isSalary()) {
if ((obj.getSalary() < Long.parseLong(valueToCompare))) {
return true;
}
} else {
System.err.println(UserMessage.INVALID_IDENTIFIER);
}
}
return false;
}
Сообщите мне, хотите ли вы видеть другие коды.
Я просто хочу знать,
Во-первых, LinkedList
- правильная структура данных для использования? Это хорошо работает? Любые улучшения для наилучшего выполнения?
Есть ли лучший способ добиться этого?
Вот несколько примеров:
select * where ID > 100
select * where Name != Ramesh
select * where Salary < 500000
select Name order by Name
select ID
Спасибо за любую помощь. Bounty будет предложено через 2 дня. Я не могу этого сделать сейчас.
Примечание2: Это тест для проверки навыков управления данными, и я не могу использовать какую-либо базу данных.