📜  Java 8 | ObjIntConsumer 接口与示例(1)

📅  最后修改于: 2023-12-03 15:01:28.110000             🧑  作者: Mango

Java 8 | ObjIntConsumer 接口与示例

介绍

在 Java 8 中,引入了一个新的函数式接口 ObjIntConsumer。这个接口代表了一个接受一个对象和一个 int 值的操作,并且不返回任何结果。它通常用于对对象的某个属性进行操作或修改。

ObjIntConsumer 接口定义如下:

@FunctionalInterface
public interface ObjIntConsumer<T> {
    void accept(T t, int value);
}

该接口只有一个方法 accept,它接受一个对象和一个 int 值作为参数,并且没有返回值。

使用示例

下面是一个使用 ObjIntConsumer 接口的示例,展示了如何使用该接口来操作对象的属性。

import java.util.ArrayList;
import java.util.List;
import java.util.function.ObjIntConsumer;

class Product {
    private String name;
    private int price;

    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Product [name=" + name + ", price=" + price + "]";
    }
}

public class ObjIntConsumerExample {
    public static void main(String[] args) {
        List<Product> products = new ArrayList<>();
        products.add(new Product("Apple", 5));
        products.add(new Product("Orange", 3));
        products.add(new Product("Banana", 2));

        // 使用 ObjIntConsumer 接口来修改产品的价格
        ObjIntConsumer<Product> increasePrice = (product, value) -> {
            product.price += value;
        };

        // 增加 1 元价格
        products.forEach(p -> increasePrice.accept(p, 1));

        // 打印修改后的产品列表
        products.forEach(System.out::println);
    }
}

输出结果:

Product [name=Apple, price=6]
Product [name=Orange, price=4]
Product [name=Banana, price=3]

在上面的示例中,我们使用了 ObjIntConsumer 接口来定义了一个 lambda 表达式 increasePrice,该表达式接受一个 Product 对象和一个 int 值,并将该值增加到产品的价格上。然后,我们使用 forEach 方法遍历了产品列表,并通过调用 increasePrice 来修改产品的价格。最后,打印出修改后的产品列表。

这就是 ObjIntConsumer 接口的一个简单示例,它展示了如何使用该接口来操作对象的属性。您可以根据自己的业务需求,进一步扩展和使用这个接口。