集合习题–单词排序
从控制台输入若干行英文内容(输入回车一行结束,输入quit表示输入完成)以单词的方式放入集合中,将这些单词忽略大小写按照出现次数自然排序,如果次数相等,则按照字母顺序倒序后打印出来。
public class A {
public static void main(String[] args) throws Exception {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
List<WordNum> list=new ArrayList<WordNum>();
while (true) {
String ss = br.readLine();
if ("quit".equalsIgnoreCase(ss))
break;
String[] arr=ss.toLowerCase().split(" ");
for(String temp:arr) {
if(temp!=null && temp.trim().length()>0) {
WordNum wn=new WordNum(temp);
int pos=list.indexOf(wn);
if(pos!=-1) {
wn=list.get(pos);
wn.addNum();
}else {
list.add(wn);
}
}
}
}
Collections.sort(list,(obj1,obj2)->{
int res=0;
if(obj1!=null && obj2!=null) {
res=obj1.getNum()-obj2.getNum();
if(res==0) {
res=obj2.getWord().compareTo(obj1.getWord());
}
}
return res;
});
list.forEach(System.out::println);
}
}
}
class WordNum {
private String word;
private int num = 1;
public WordNum(String word) {
this.word = word;
}
public void addNum() {
this.num++;
}
public int getNum() {
return num;
}
public String getWord() {
return word;
}
@Override
public String toString() {
return "WordNum [word=" + word + ", num=" + num + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((word == null) ? 0 : word.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
WordNum other = (WordNum) obj;
if (word == null) {
if (other.word != null)
return false;
} else if (!word.equals(other.word))
return false;
return true;
}
}