package Demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ABTest {
/**
* 原数据List<PersonTest>:[PersonTest [id=1,name=one,age=1], PersonTest [id=2,name=two,age=2],
* PersonTest [id=3,name=one,age=3], PersonTest [id=4,name=four,age=100],
* PersonTest [id=5,name=five,age=10]]
*
* 结果Map<String, Map<String, Object>>:{two={name=2, age=2}, five={name=5, age=10},
* one={name=1,3, age=3}, four={name=4, age=100}}
*
* 需求:按name分类,然后找出name中全部的id和最大的age。
* 我的思想:先找出不同的name,然后再同时找同name的全部id和最大的age。
* 怎么优化方法1和方法2?
*/
//方法1
private static Map<String, Map<String, Object>> getMap(List<PersonTest> result) {
Map<String, Map<String, Object>> dataMap = new HashMap<String, Map<String, Object>>();
Set<String> nameSet = new HashSet<String>();
Map<String, Object> nameMap = new HashMap<String, Object>();
// 一次取不同 的key
for (PersonTest vo : result) {
if (null != vo) {
nameSet.add(vo.getName());
}
}
// 二次取不同name
for (String name : nameSet) {
nameMap = getNameMap(name, result);
dataMap.put(name, nameMap);
}
return dataMap;
}
//方法2
private static Map<String, Object> getNameMap(String name, List<PersonTest> result) {
Map<String, Object> nameMap = new HashMap<String, Object>();
List<Integer> levelList = new ArrayList<Integer>();
StringBuilder sb = new StringBuilder();
for (PersonTest vo : result) {
if (vo.getName().equals(name)) {
sb.append("," + vo.getId());
levelList.add(vo.getAge());
}
}
nameMap.put("age", Collections.max(levelList));
nameMap.put("name", sb.toString().substring(1));
return nameMap;
}
public static void main(String[] args) {
List<PersonTest> list = new ArrayList<PersonTest>();
PersonTest p1 = new PersonTest();
p1.setId(1);
p1.setName("one");
p1.setAge(1);
PersonTest p2 = new PersonTest();
p2.setId(2);
p2.setName("two");
p2.setAge(2);
PersonTest p3 = new PersonTest();
p3.setId(3);
p3.setName("one");
p3.setAge(3);
PersonTest p4 = new PersonTest();
p4.setId(4);
p4.setName("four");
p4.setAge(100);
PersonTest p5 = new PersonTest();
p5.setId(5);
p5.setName("five");
p5.setAge(10);
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
System.out.println("list::::::" + list);
System.out.println("out::::::" + getMap(list));
}
}
class PersonTest {
private int id;
private String name;
private int age;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "PersonTest [id=" + id + ",name=" + name + ",age=" + age + "]";
}
}