Java
public class Lec17Main {
public static void main(String[] args) {
List<Fruit> fruits = Arrays.asList(
new Fruit("사과", 1000),
new Fruit("사과", 1200),
new Fruit("사과", 1200),
new Fruit("사과", 1500),
new Fruit("바나나", 3000),
new Fruit("바나나", 3200),
new Fruit("바나나", 2500),
new Fruit("수박", 10000)
);
List<Fruit> result = Lec17Main.filterFruits(fruits, fruit -> fruit.getName().equals("사과"));
result.forEach(it -> {
System.out.println(String.format("name: %s, price: %s", it.getName(), it.getPrice()));
});
List<Fruit> result2 = Lec17Main.filterFruits2(fruits, fruit -> fruit.getPrice() >= 2000);
result2.forEach(it -> {
System.out.println(String.format("name: %s, price: %s", it.getName(), it.getPrice()));
});
}
private static List<Fruit> filterFruits(List<Fruit> fruits, Predicate<Fruit> fruitFilter) {
List<Fruit> results = new ArrayList<>();
for (Fruit fruit: fruits) {
if (fruitFilter.test(fruit)) {
results.add(fruit);
}
}
return results;
}
private static List<Fruit> filterFruits2(List<Fruit> fruits, Predicate<Fruit> fruitFilter) {
return fruits.stream().
filter(fruitFilter).
collect(Collectors.toList());
}
}
fun main() {
val fruits = listOf(
Fruit("사과", 1000),
Fruit("사과", 1200),
Fruit("사과", 1200),
Fruit("사과", 1500),
Fruit("바나나", 3000),
Fruit("바나나", 3200),
Fruit("바나나", 2500),
Fruit("수박", 10000)
)
val isApple = fun(fruit: Fruit): Boolean {
return fruit.name == "사과"
}
val isApple2 = { fruit: Fruit -> fruit.name == "사과" }
val isApple3: (Fruit) -> Boolean = fun(fruit: Fruit): Boolean {
return fruit.name == "사과"
}
val isApple4: (Fruit) -> Boolean = { fruit: Fruit -> fruit.name == "사과" }
isApple(fruits[0])
isApple.invoke(fruits[0])
val filterFruits = filterFruits(fruits, isApple)
for (filterFruit in filterFruits) {
println("name: ${filterFruit.name}, price: ${filterFruit.price}")
}
filterFruits(fruits, {fruit: Fruit -> fruit.name == "사과"})
filterFruits(fruits) { fruit: Fruit -> fruit.name == "사과" }
filterFruits(fruits) { fruit -> fruit.name == "사과" }
filterFruits(fruits) { a -> a.name == "사과" }
filterFruits(fruits) { it.name == "사과" }
}
private fun filterFruits(
fruits: List<Fruit>,
filter: (Fruit) -> Boolean
): List<Fruit> {
val results = mutableListOf<Fruit>()
for (fruit in fruits) {
if (filter(fruit)) {
results.add(fruit)
}
}
return results
}