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);
}
}
来看运行结果
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);