Java Set集合的使用

一、需求:

编程:创建一个商品(Product)类,其中属性:商品名,商品单价,商品的数量,商品产地。
在 ProductBiz 类中添加以下方法:
初始化数据:
苹果     5.20      100       山东
草莓     19.90     0     杭州
橘子     4.50      580       湖北
苹果     6.00      120       陕西
香蕉     3.10      150       海南
西瓜     10.50     100       天津
1、将多个商品对象存储在 Set 集合中,初始化数据。
2、显示所有的商品信息;
3、打印输出商品金额大于1000元的商品信息;
4、打印售空的商品的信息;
5、打印输出商品产地为"天津"的商品信息;
6、输入一个商品名,查询出此类商品的信息,如果不存在,则打印商品"商场无此商品!!!"
7、输入一个价格区间范围,查询出集合中所有在这个价格区间的所有商品信息。

二、编码

1、Product类的封装 

package set.sets;


import java.text.DecimalFormat;
import java.util.Objects;

public class Product {
    // 商品属性:名称、价格、数量和产地
    private String name;
    private double price;
    private int quantity;
    private String origin;

    // 构造方法
    public Product(String name, double price, int quantity, String origin) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
        this.origin = origin;
    }

    // Getter和Setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public String getOrigin() {
        return origin;
    }

    public void setOrigin(String origin) {
        this.origin = origin;
    }

    // 重写equals和hashCode方法,确保Set集合中商品名相同即为重复
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Objects.equals(name, product.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    // 重写toString方法,便于显示商品信息
    @Override
    public String toString() {
        // 格式化价格,保留两位小数
        DecimalFormat df = new DecimalFormat("#.00");
        return name + "\t\t" +df.format(price)  + "\t\t" + quantity + "\t\t" + origin ;
    }
}

 2、业务类封装

package set.sets;

import java.util.HashSet;
import java.util.Set;

public class ProductBiz {
    static   Set<Product> productSet = new HashSet<>();


    //初始化数据
    static {
        // 创建多个商品对象并添加到Set集合中
        productSet.add(new Product("苹果", 5.20, 100, "山东"));
        productSet.add(new Product("香蕉", 3.10, 150, "海南"));
        productSet.add(new Product("橘子", 4.50, 580, "湖北"));
        // 这个商品将不会被添加,因为商品名已存在
        productSet.add(new Product("苹果", 6.00, 120, "陕西"));
        productSet.add(new Product("草莓",19.90,0,"杭州"));
        productSet.add(new Product("西瓜",10.50,100,"天津"));

    }

    // 显示所有商品信息
    public  void displayAllProducts() {
        System.out.println("商品信息:");
        System.out.println("名称\t\t单价(元)\t\t数量(斤)\t\t产地");
        for (Product product : productSet) {
            System.out.println(product);
        }
        System.out.println("\n");
    }

    // 打印输出商品金额 > 1000 的所有商品信息
    public  void displayProductsPriceGreaterThan(double total) {
        System.out.println("商品金额 > " + total + " 的商品信息:");
        for (Product product : productSet) {
            //判断金额》1000
            if (product.getPrice()*product.getQuantity() > total) {
                System.out.println(product);
            }
        }
        System.out.println("\n");
    }

    // 打印售空的商品的信息
    public  void displaySoldOutProducts() {
        System.out.println("售空的商品信息:");
        for (Product product : productSet) {
            if (product.getQuantity() <= 0) {
                System.out.println(product);
            }
        }
        System.out.println("\n");
    }

    // 打印输出商品产地为"天津"的商品信息
    public  void displayProductsOriginAsTianjing() {
        System.out.println("商品产地为'天津'的商品信息:");
        for (Product product : productSet) {
            if ("天津".equals(product.getOrigin())) {
                System.out.println(product);
            }
        }
        System.out.println("\n");
    }

    // 输入一个商品名,查询出此类商品的信息,如果不存在,则打印商品"商场无此商品!!!"
    public  void queryProductByName(String name) {
        System.out.println("查询商品名: " + name);
        for (Product product : productSet) {
            if (name.equals(product.getName())) {
                System.out.println(product+"\n");
                return;
            }
        }

        System.out.println("商场无此商品!!!");
    }

    // 输入一个价格段,查询出集合中所有在这个价格区间的所有商品信息
    public  void queryProductsInPriceRange( double minPrice, double maxPrice) {
        System.out.println("价格区间在 " + minPrice + " 到 " + maxPrice + " 之间的商品信息:");
        for (Product product : productSet) {
            if (product.getPrice() >= minPrice && product.getPrice() <= maxPrice) {
                System.out.println(product);
            }
        }

        System.out.println("\n");
    }
}

3、测试类

package set.sets;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {

        //业务对象
        ProductBiz productBiz = new ProductBiz();

        // 调用各种方法显示和处理商品信息
        productBiz.displayAllProducts();

        // 创建Scanner对象,用于接收用户输入
        Scanner scanner = new Scanner(System.in);
        //显示价格大于1000的商品信息
        System.out.println("请输入价格大于1000的商品信息:");
        double total = scanner.nextDouble();
        productBiz.displayProductsPriceGreaterThan(total);

        //显示售空商品信息
        productBiz.displaySoldOutProducts();
        //显示产地为天津的商品信息
        productBiz.displayProductsOriginAsTianjing();

        //查询商品信息
        System.out.println("请输入商品名称:");
        String name = scanner.next();
        productBiz.queryProductByName(name);

        //查询价格区间商品信息
        //3.00-5.00
        System.out.println("请输入价格范围:");
        double minPrice = scanner.nextDouble();
        double maxPrice = scanner.nextDouble();
        productBiz.queryProductsInPriceRange(minPrice, maxPrice);
    }


}

三、运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值