Java8 новые функции --Lambda выражение -1

Во-первых, бросить спрос

  Выберите яблоки в супермаркете, диверсифицированные условия отбора.

  Пример: для идентификации и зеленого яблока вес равен 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 Резюме

  Две стратегии режима реализации, реализации нескольких классов наследования фильтров, анонимные внутренние классы, вы можете легко реализовать сложные условия фильтрации данных, но в коде немного громоздким.

  

 

рекомендация

отwww.cnblogs.com/gavincoder/p/11788024.html