- 暴露破解。。。纯粹的API调用工程师再次!!! 不过下面还是用到了很多处理方法的,利用stream流对Map进行取值、排序、去重。再根据TreeMap的特性来排序。也是有很多指的考量的地方的。
import java.util.*;
import java.util.stream.Collectors;
public class Main {
// 构造内部类,用于记录
private static class CountR{
private Integer index;
private String number;
public CountR(Integer index, String number) {
this.index = index;
this.number = number;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
public static void main(String[] args){
Scanner s = new Scanner(System.in);
ArrayList<HashMap<Integer,String>> list = new ArrayList<>();
while (s.hasNextLine()){
String line = s.nextLine();
if ("".equals(line)) break;
String[] strings = line.split("\\s");
HashMap<Integer,String> map = new HashMap<>();
for (int i = 1; i < strings.length; i++) {
map.put(i-1,strings[i]);
}
list.add(map);
}
HashMap<Integer,String> mapR = list.get(0);
List<String> listL = list.get(1).entrySet().stream().map(Map.Entry::getValue).sorted().distinct().collect(Collectors.toList());
TreeMap<Integer,List<CountR>> treeMap = new TreeMap<>();
for (String str : listL) {
List<Map.Entry<Integer, String>> entries = mapR.entrySet().stream().filter(e -> e.getValue().contains(str)).collect(Collectors.toList());
List<CountR> countRS = new ArrayList<>();
for (Map.Entry<Integer, String> entry : entries) {
countRS.add(new CountR(entry.getKey(),entry.getValue()));
}
treeMap.put(Integer.valueOf(str),countRS);// 记录索引和数值
}
// 获取非空集合
List<Map.Entry<Integer, List<CountR>>> resList = treeMap.entrySet().stream().filter(e -> e.getValue() != null && e.getValue().size() > 0).collect(Collectors.toList());
StringBuilder resBuilder = new StringBuilder();
int numCount = resList.size()*2;
for (Map.Entry<Integer, List<CountR>> res : resList) {
resBuilder.append(res.getKey()).append(" ");
List<CountR> values = res.getValue();
resBuilder.append(values.size()).append(" ");
numCount += values.size()*2;
for (CountR countR : values) {
resBuilder.append(countR.getIndex()).append(" ").append(countR.getNumber()).append(" ");
}
}
System.out.println(numCount+ " " + resBuilder.toString());
}
}