Во-первых, бросить спрос
Выберите яблоки в супермаркете, диверсифицированные условия отбора.
Пример: для идентификации и зеленого яблока вес равен 150, а вес меньше, чем 120, чтобы идентифицировать красные яблоки.
1, класс Apple,
общественный класс Apple , { частный цвет строки; частный ИНТ вес; общественное Яблоко (String цвет, ИНТ вес) { это .color = цвет; это .Weight = вес; } Публичная строка GetColor () { возвращение цвета; } Общественного недействительными SetColor (цвет String) { это .color = цвет; } Общественного ИНТ getWeight () { вернуть вес; } Общественного недействительнымиsetWeight ( INT вес) { это .Weight = вес; } @Override общественного Строка ToString () { возвращение "цвет =" + это .color + "вес =" + это .Weight; } }
Во-вторых, реализация
Принять режим стратегий, фильтрации данных.
1, выглядят как яблоки
общественный класс FindApple { общественный статический Список <Яблоко> findApple (List <Яблоко> яблоки, AppleFilter appleFilter) { Список список <Яблоко> = новый ArrayList <> (); для (Apple яблоко: яблоки) { если (appleFilter.filter (яблоко)) { list.add (яблоко); } } Возвращать список; } }
2, реализация
-
Интерфейс метода, расширение наследования для достижения нескольких фильтров
- Зеленое яблоко и вес, равный к фильтру 150
общественный класс GreenAnd150WeightFilter реализует AppleFilter { @Override общественного булев фильтр (Apple яблоко) { возвращение ( "зеленый" .equals (apple.getColor ()) && 150 == apple.getWeight ()); } }
-
- Apple, красный фильтр и вес меньше, чем 120
общественный класс RedLess120WeightFilter реализует AppleFilter { @Override общественного булев фильтр (Apple яблоко) { возвращение ( "красный" .equals (apple.getColor ()) && 120> apple.getWeight ()); }
}
-
- Реализация и результаты запроса
общественности статической недействительным основной (String [] арг) { Список <Яблоко> appleList = Arrays.asList ( новая компания Apple ( "зеленый", 150), новый Apple , ( "красный", 100 ));
Список <Яблоко> greenApples = findApple (appleList, новый GreenAnd150WeightFilter ()); System.out.println (greenApples); Список <Яблоко> redApples = findApple (appleList, новый RedLess120WeightFilter ()); System.out.println (redApples); }
-
Метод два анонимных внутренних классов
общественный статический недействительный основной (String [] арг) { Список <Яблоко> appleList = Arrays.asList ( новая новое Яблоко ( "Green", 150), новый новое Яблоко ( "Красный", 100 )); // Найти зеленый вес равен 150 и Apple , List <Яблоко> greenApples = findApple (appleList, новый новый AppleFilter () { @Override общественный Логический фильтр (Яблоко Яблоко) { возвращение ( "Зеленый" .equals (apple.getColor ()) == 150 && apple.getWeight () ); } }); System.out.println (greenApples); // Найти вес менее 120 и красное яблоко Список <Яблоко> redApples = findApple (appleList, новый AppleFilter () { @Override общественного булево фильтр (Apple яблоко) { возвращение ( "красный" .equals (apple.getColor ()) && 120> apple.getWeight ()); } }); System.out.println (redApples); }
3 Резюме
Две стратегии режима реализации, реализации нескольких классов наследования фильтров, анонимные внутренние классы, вы можете легко реализовать сложные условия фильтрации данных, но в коде немного громоздким.