用Java写一个switch问题

switch
我们希望编写一个函数,统计一个 List 列表中的数值分布,其中 1 是 small,2 是 middle, 3 是 big,3以上都是 huge 。列表中的数值全部都在 1 到 5之间,编写程序在对象的 small, middle, big, huge 四个字段 保存正确的统计结果

emm。就是说,按照你的意思,就是写个方法,遍历一个List列表呗。然后用swich代替if进行判断。保存在对象的字段里那就用隐式参数。OK,顺着这个思路,我们写一个类

package help.List;

import java.util.Iterator;
import java.util.List;

public class ListTest
{
    private int small;
    private int middle;
    private int big;
    private int huge;

    public void getSMBN(LinkedList<Integer> smbn)
    {
        Iterator<Integer> iterator = smbn.iterator();
        //一个特殊的值。用来统计总数量
        int quantity = smbn.size();
        while (iterator.hasNext())
        {
            switch (iterator.next())
            {
                case 1:
                    this.small++;
                    break;
                case 2:
                    this.middle++;
                    break;
                case 3:
                    this.big++;
                    break;
                default:
                    this.huge++;
                    break;
            }
        }
        System.out.println("源List列表中共有small值" + small + "个;");
        System.out.println("middle值" + middle + "个;");
        System.out.println("big值" + big + "个;");
        System.out.println("huge值" + huge + "个.");
        
        //清点数据是否遗漏
        int inventory = small + middle + big + huge;
        if (quantity == inventory)
            System.out.println("源列表共" + quantity + "个值,实际清点数量" + inventory + "个值,数据清点正确!");
        else
            System.out.println("源列表共" + quantity + "个值,实际清点数量" 
                    + inventory + "个值,大约遗漏了" 
                    + (quantity - inventory) + "个值");
    }
}

现在再写一个测试类测试程序

package help.List;

import java.util.LinkedList;

public class Test
{
    public static void main(String[] args)
    {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(2);
        list.add(2);
        list.add(1);
        list.add(4);
        list.add(3);
        ListTest test = new ListTest();
        test.getSMBN(list);
    }
}

来看运行结果

img


可以看到,程序成功清点出来了。不过我并没有使用List类。因为我没有用过这个类。里面很多方法都不一样。不过思路应该还是一样的。你就把几个方法和参数改改应该就能用了

    private Map<String, Integer> count(List<Integer> list) {
        Map<String, Integer> res = new HashMap<>();
        for (Integer val : list) {
            switch (val) {
                case 1:
                    res.merge("small", 1, Integer::sum);
                    break;
                case 2:
                    res.merge("middle", 1, Integer::sum);
                    break;
                case 3:
                    res.merge("big", 1, Integer::sum);
                    break;
                default:
                    res.merge("huge ", 1, Integer::sum);
            }
        }
        return res;
    }

好问题,正好练练手

        List<String> tList = new ArrayList<>();
        tList.add("1");
        tList.add("2");
        tList.add("3");
        tList.add("4");
        tList.add("5");

        long small = tList.stream().filter("1"::equals).count();
        long middle = tList.stream().filter("2"::equals).count();
        long big = tList.stream().filter("3"::equals).count();
        long huge = tList.stream().filter("4"::equals).count();
        huge += tList.stream().filter("5"::equals).count();

        System.out.println(small+"\t"+middle+"\t"+big+"\t"+huge);