黑马Java期末考试①

在这里记录一下,以防代码丢失

感谢黑马


题目一

**需求**

* 某小型商城系统的订单信息在**素材下的orders.xml文件中**,现在要求把xml中的订单信息,封装成一个一个的订单对象,将订单对象保存到ArrayList集合中。

**具体功能点要求**

1) 定义订单类Order,创 建ArrayList集合,用于存储订单Order对象 (解析XML 4分,封装成对象2分)

2)请使用Stream流找出今天之前的订单,并遍历输出。(3分)

3) 请使用Stream流找出集合中价格最贵的订流单,把这个订单的详细信息打印出来。(3分)

4) 请使用Stream流遍历集合中的每个订单,要求按照价格降序输出每个订单的详情。(3分)

  • Order类
package com.study.answer1;

import java.time.LocalDateTime;

public class Order {
	private int id;
	private String name;
	private LocalDateTime time;
	private double price;
			
	public Order() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public LocalDateTime getTime() {
		return time;
	}
	public void setTime(LocalDateTime time) {
		this.time = time;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "[id=" + id + " name=" + name + " time=" + time + " price=" + price + "]\n";
	}
}
  • Test类
package com.study.answer2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

//张全蛋儿  农家乐,野外拓展
//李二狗子  轰趴,野外拓展,健身房
//翠花     野外拓展,
//小帅     轰趴,健身房
//有容     农家乐
/**
	1、请找出每个去处想去的人数是多少,并输出投票最多的去处是哪个。
	2、请找出哪些人没有选择投票最多的去处,输出他们的名字
 */

public class Test {

	public static void main(String[] args) {
		//1.把数据装进Map或对象中
		Map<String,List<String>> selects=new HashMap<>();
		
		List<String> data1=new ArrayList<>();
		Collections.addAll(data1, "农家乐","野外拓展","轰趴");
		selects.put("张全蛋儿", data1);
		
		List<String> data2=new ArrayList<>();
		Collections.addAll(data2, "轰趴","野外拓展","健身房");
		selects.put("李二狗子", data2);
		
		List<String> data3=new ArrayList<>();
		Collections.addAll(data3, "野外拓展","轰趴");
		selects.put("翠花", data3);
		
		List<String> data4=new ArrayList<>();
		Collections.addAll(data4, "健身房");
		selects.put("小帅", data4);
		
		List<String> data5=new ArrayList<>();
		Collections.addAll(data5, "农家乐");
		selects.put("有容", data5);
		
		System.out.println(selects);
		
		//2.找出每个地点选择的人数和最多人选的地点
		Map<String,Integer> count=new HashMap<>();
		selects.forEach((name,datas)->{
			for(String data:datas) {
				count.put(data, count.containsKey(data)?count.get(data)+1:1);
			}
		});
		System.out.println("每个地点去的人数:");
		System.out.println(count);
		
		System.out.println("最多人选的地点:");
		Entry<String, Integer> entry = count.entrySet().stream().max((e1,e2)->e1.getValue()-e2.getValue()).get();
		//为了多个最多都输出
		List<String> addresMax = count.entrySet().stream().filter(e->e.getValue()==entry.getValue()).map(e->e.getKey()).collect(Collectors.toList());
		System.out.println(addresMax);
		//3.哪些人没去最多的地方
		System.out.println("没去最多人选的地点的人:");
		selects.entrySet().stream().filter(e->{
			boolean flag=true;
//			Outer:for(String addres:e.getValue()) {
//				for(String addresMaxTarget:addresMax) {
//					if(addres==addresMaxTarget) {
//						flag=false;
//						break Outer;
//					}
//				}
//			}
			//答案
			for(String s:e.getValue()) {
				if(addresMax.contains(s)) {
					flag=false;
					break;
				}
			}
			return flag;
		}).forEach(e->System.out.println(e.getKey()));
	}
}

题目二

**需求**

* 某个班级组织团建活动,班长给出了几个去处给大家选择,分别是 “农家乐” , "轰趴",“野外拓展”,“健身房”,本次活动每个学生是可以多选的。

* 现在有如下5名学生选择了如下去处。

```

张全蛋儿 农家乐,野外拓展

李二狗子 轰趴,野外拓展,健身房

翠花 野外拓展,

小帅 轰趴,健身房

有容 农家乐

```

**具体的功能点如下:**

1、请找出每个去处想去的人数是多少,并输出投票最多的去处是哪个。

2、请找出哪些人没有选择投票最多的去处,输出他们的名字。(**本案例用不用stream流做都给分**)

​ **比如:小帅,有容没有选择野外拓展。**

本题写的时候更改了去处

  • Test类
package com.study.answer2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

//张全蛋儿  农家乐,野外拓展
//李二狗子  轰趴,野外拓展,健身房
//翠花     野外拓展,
//小帅     轰趴,健身房
//有容     农家乐
/**
	1、请找出每个去处想去的人数是多少,并输出投票最多的去处是哪个。
	2、请找出哪些人没有选择投票最多的去处,输出他们的名字
 */

public class Test {

	public static void main(String[] args) {
		//1.把数据装进Map或对象中
		Map<String,List<String>> selects=new HashMap<>();
		
		List<String> data1=new ArrayList<>();
		Collections.addAll(data1, "农家乐","野外拓展","轰趴");
		selects.put("张全蛋儿", data1);
		
		List<String> data2=new ArrayList<>();
		Collections.addAll(data2, "轰趴","野外拓展","健身房");
		selects.put("李二狗子", data2);
		
		List<String> data3=new ArrayList<>();
		Collections.addAll(data3, "野外拓展","轰趴");
		selects.put("翠花", data3);
		
		List<String> data4=new ArrayList<>();
		Collections.addAll(data4, "健身房");
		selects.put("小帅", data4);
		
		List<String> data5=new ArrayList<>();
		Collections.addAll(data5, "农家乐");
		selects.put("有容", data5);
		
		System.out.println(selects);
		
		//2.找出每个地点选择的人数和最多人选的地点
		Map<String,Integer> count=new HashMap<>();
		selects.forEach((name,datas)->{
			for(String data:datas) {
				count.put(data, count.containsKey(data)?count.get(data)+1:1);
			}
		});
		System.out.println("每个地点去的人数:");
		System.out.println(count);
		
		System.out.println("最多人选的地点:");
		Entry<String, Integer> entry = count.entrySet().stream().max((e1,e2)->e1.getValue()-e2.getValue()).get();
		//为了多个最多都输出
		List<String> addresMax = count.entrySet().stream().filter(e->e.getValue()==entry.getValue()).map(e->e.getKey()).collect(Collectors.toList());
		System.out.println(addresMax);
		//3.哪些人没去最多的地方
		System.out.println("没去最多人选的地点的人:");
		selects.entrySet().stream().filter(e->{
			boolean flag=true;
//			Outer:for(String addres:e.getValue()) {
//				for(String addresMaxTarget:addresMax) {
//					if(addres==addresMaxTarget) {
//						flag=false;
//						break Outer;
//					}
//				}
//			}
			//答案
			for(String s:e.getValue()) {
				if(addresMax.contains(s)) {
					flag=false;
					break;
				}
			}
			return flag;
		}).forEach(e->System.out.println(e.getKey()));
	}
}

题目三

**需求**

* 黑马程序员教学管理系统的菜单信息如下(图1所示),菜单的详细数据存储在**给的素材文件“系统菜单.txt”中**。

**具体要实现的功能点如下所示**

1、请从**系统菜单.txt**中读取这些菜单信息,将这些菜单信息在控制台展示成图1的样子(必须确保展示的顺序是正确的)

2、将正确的菜单顺序,写出到一个新文件**"系统菜单2.txt"**中保存起来,详细格式如下

**评分细则**

* 能把数据读取出来:3分

* 能展示成控制台的样子:8分

* 能写出去:4分。

  • Test类
    package com.study.answer3;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Test {
    //	1、请从"系统菜单.txt" 中读取这些菜单信息,将这些菜单信息在控制台展示成图1的样子(必须确保展示的顺序是正确的)
    //	2、将正确的菜单顺序,写出到一个新文件"系统菜单2.txt"中保存起来
    	public static void main(String[] args) {
    		
    		try (
    				//1.使用流读取文件中的全部数据。
    				BufferedReader br=new BufferedReader(new FileReader("D:\\code\\eclipse-workspace\\期末答题卡\\src\\系统菜单.txt"));
    				//需要绝对路径,相对不行,不知道为什么
    				//用于打印新菜单的流
    				PrintStream ps=new PrintStream("D:\\code\\eclipse-workspace\\期末答题卡\\src\\系统菜单2.txt");
    		){
    			//2.按照行读取菜单,存入集合
    			List<String> menus=new ArrayList<>();
    			String line;
    			while((line=br.readLine())!=null) {
    				menus.add(line);
    			}
    			
    			//3.对菜单进行排序
    			Collections.sort(menus);//这里可以直接使用sort(),此外还可用stream流
    			
    			//4.遍历集合
    			for(String menu:menus) {
    				//不追求缩进
    //				System.out.println(menu);
    				String[] numName=menu.split("-");
    				System.out.println(numName[0].length()==4?numName[1]:"\t"+numName[1]);
    			}
    			
    			//5.写菜单到新文件
    			for(String menu:menus) {
    				ps.println(menu);
    			}
    		} catch (Exception e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    		}
    
    	}
    
    }
    

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值