Eclipse не поможет вам напрямую в такой задаче - он может только помочь в создании программы - он не создаст сам по себе.
Если добавить новую библиотеку в проект не вариант, выможете написать собственное общее решение.Тем не менее, я настоятельно рекомендую вам добавить некоторые общие библиотеки, такие как Guava или Apache Commons, как было предложено ранее.
Две задачи, которые вы пытаетесь выполнить, можно более широко описать как фильтрацию и сопоставление (или выборпроектирование).Фильтрация может быть обобщена с помощью предиката - простой функции, которая будет возвращать, должен ли объект быть включен в новую коллекцию.Сопоставление может быть достигнуто с помощью универсальной функции, которая берет один исходный объект (в вашем случае, MyObject) и возвращает объект другого типа (в вашем случае, String).
Эти операции над множествамипроще поддерживать языки, некоторые из которых скомпилированы в JVM, такие как python (jython), groovy и scala.Но я предполагаю, что нельзя использовать другой язык для проекта.
Поэтому я продемонстрирую, как этого можно добиться в Java, хотя синтаксис немного более грубый, так как мы будем использоватьанонимные классы для предиката и преобразователя.
Существует простой пример самодельной фильтрации в Каков наилучший способ фильтрации коллекции Java? , поэтому я буду использовать его впример.
Два необходимых нам интерфейса:
public interface Convertor<FROM, TO> {
TO convert(FROM from);
}
public interface Predicate<T> {
boolean apply(T type);
}
И фактическая «библиотека»:
import java.util.ArrayList;
import java.util.Collection;
public class CollectionUtils {
public static <FROM, TO> Collection<TO> select(Collection<FROM> from, Convertor<FROM, TO> convertor) {
Collection<TO> result = new ArrayList<TO>();
for (FROM fromItem: from) {
result.add(convertor.convert(fromItem));
}
return result;
}
public static <T> Collection<T> filter(Collection<T> target, Predicate<T> predicate) {
Collection<T> result = new ArrayList<T>();
for (T element: target) {
if (predicate.apply(element)) {
result.add(element);
}
}
return result;
}
}
Теперь мы можем легко выполнить две задачи:
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
ArrayList<MyObject> objects = new ArrayList<MyObject>();
objects.add(new MyObject("first"));
objects.add(new MyObject("second"));
objects.add(new MyObject("third"));
// Now do Task A and Task B
// Task A: Filter
Collection<MyObject> filtered = CollectionUtils.filter(objects, new Predicate<MyObject>() {
@Override
public boolean apply(MyObject myObject) {
return myObject.myProperty.equals("second");
}
});
for (MyObject myObject: filtered) {System.out.println(myObject.myProperty);}
System.out.println();
// TASK B: Map/Select
Collection<String> transforemd = CollectionUtils.select(objects, new Convertor<MyObject, String>() {
@Override
public String convert(MyObject from) {
return from.myProperty;
}
});
for (String str: transforemd) {System.out.println(str);}
}
}
Теперь было бы очень просто изменить предикат для фильтрации других объектов или создать другие строки или даже другие типы вместо сценария: просто измените функции apply () и convert ()!(Ну да ладно, и некоторые общие подсказки :)).
Отказ от ответственности: код не был тщательно протестирован, только развернут для демонстрации и может иметь некоторые другие проблемы (такие как выделение ArrayList для новых коллекций).Вот почему обычно лучше использовать хорошо протестированные и отлаженные сторонние библиотеки!