定义一个方法,可以求出任意个整数的和.然后在主方法中调用.
要求:
调用方法的时候,实参随便写就行,本题重点考察的是自定义方法的形参设计;
效果:
(实参随便写,所以求和的结果不一样也行)
参考代码:
public static void main(String[] args) {
int i1 = add2(1, 2);
int i2 = add2(2,3,4);
int i3 = add2(100, 200,300,400);
System.out.println("2个整数的和是:"+i1);
System.out.println("3个整数的和是:"+i2);
System.out.println("4个整数的和是:"+i3);
}
public static int add2(int... a) {
//此时的可变参数a可以当成数组使用
int sum = 0;
for (int i : a) {
sum+=i;
}
return sum;
}
随机生成10个10至20之间的随机数(数字允许重复),使用Stream流的技术,找出大于15的元素并打印出来;
效果:
(随机数结果不要求一致,随机生成啥样就是啥样)
参考代码:
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Random r = new Random();
for (int i = 1; i <= 10; i++) {
int sj = r.nextInt(20 - 10 + 1) + 10;
System.out.println("第"+i+"次生成的随机数是:"+sj);
list.add(sj);
}
//获取流对象,筛选数据并遍历输出
System.out.print("大于15的元素有:");
list.stream().filter(y->y>15).forEach(y-> System.out.print(y+" "));
}
定义集合HashSet,添加以下数据:
“王佳乐”,“张三丰”,“王思聪”,“张飞”,“刘晓敏”,“张靓颖”,“王敏”
(注意set集合保存的数据并不一定会和添加的顺序一致,所以需要先输出set集合中所有的元素查看原始顺序)
要求:
1:使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
筛选后,获取前两个,并打印。
2:重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
筛选后,跳过第1个,打印剩余的人员。
效果:
参考代码:
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
Collections.addAll(set,"王佳乐","张三丰","王思聪","张飞","刘晓敏","张靓颖","王敏");
System.out.println("set集合的原始元素是:"+set);
//使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
//筛选后,获取前两个,并打印。
System.out.print("前两个姓张的元素是:");
set.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s-> System.out.print(s+" "));
System.out.println();
//重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
//筛选后,跳过第1个,打印剩余的人员。
System.out.print("跳过第1个姓王的元素是:");
set.stream().filter(s -> s.startsWith("王")).skip(1).forEach(s-> System.out.print(s+" "));
}
定义main()方法,按以下顺序编写程序:
定义集合List,添加以下数据:
“王佳乐”,“张三丰”,“王思聪”,“张飞”,“刘晓敏”,“张靓颖”,“王敏”
要求:
1:筛选出所有的“张”姓学员;
2:筛选出所有的“王”姓学员;
3:将两个流合并为一个流后找出名字是3个字的名字数量
参考代码:
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
Collections.addAll(set,"王佳乐","张三丰","王思聪","张飞","刘晓敏","张靓颖","王敏");
System.out.println("set集合的原始元素是:"+set);
//使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
Stream<String> st1 = set.stream().filter(s -> s.startsWith("张"));
//重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
Stream<String> st2 = set.stream().filter(s -> s.startsWith("王"));
//将两个流合并为一个流后找出名字是3个字的名字数量
long count = Stream.concat(st1, st2).filter(s -> s.length() == 3).count();
System.out.println("姓张的和姓王的并且名字是3个字的人共有:"+count+"个");
}
本题综合单列集合,双列集合,键盘输入,Stream流操作
1.键盘录入3个学生信息,存储到学生对象(姓名,年龄).然后添加到ArrayList集合中.
2.键盘录入3个居住地信息,添加到另一个集合ArrayList;
3.把两个list集合中的数据收集到同一个map集合中,键是学生对对象,值是居住地址.
4.要求map集合中不能存在相同的学生信息.并按照学生年龄降序排列
5.使用Stream流输出集合中所有姓张的人信息;
效果:
参考代码:
public class Student{
private String name;
private int age;
--自己补上构造方法,getter/setter方法,toString,hashCode和equals方法--
}
public static void main(String[] args) {
//1.键盘录入3个学生信息,存储到学生对象(姓名,年龄).然后添加到ArrayList集合中.
Scanner sc = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<>();
for (int i = 1; i <=3; i++) {
System.out.println("请输入第"+i+"个学生姓名:");
String name = sc.next();
System.out.println("请输入第"+i+"个学生年龄:");
int age = sc.nextInt();
Student s = new Student(name,age);
list.add(s);
}
ArrayList<String> listAddr = new ArrayList<>();
//2.键盘录入3个居住地信息,添加到另一个集合ArrayList;
for (int i = 1; i <= 3; i++) {
System.out.println("请输入第"+i+"个学生居住地:");
String addr = sc.next();
listAddr.add(addr);
}
//3.把两个list集合中的数据收集到同一个map集合中,键是学生对对象,值是居住地址.
//4.要求map集合中不能存在相同的学生信息.并按照学生年龄降序排列
TreeMap<Student,String> map = new TreeMap<>((s1,s2)->s2.getAge()-s1.getAge());
for (int i = 0; i < list.size(); i++) {
Student key = list.get(i);
String value = listAddr.get(i);
map.put(key,value);
}
//5.使用Stream流输出集合中所有姓张的人信息;
map.entrySet().stream().filter(s->s.getKey().getName().startsWith("张")).forEach(s-> System.out.println("学生信息:"+s.getKey()+",对应的居住地是:"+s.getValue()));
}