用JAVA实现,运用1.8的特性,一个实现类的集合中,有一个String类型的字段,这个字段的内容有纯数字类型的,还有不为数字的字符,需将这个集合重新排序,规则是:纯数字的在前,非数字都排在后,并且纯数字的按顺序排序
时间: 2024-01-05 19:02:08 浏览: 62
List<map>多字段组合排序
5星 · 资源好评率100%
可以使用Java 8中的Stream API来实现对集合的排序。
具体实现可以按照以下步骤:
1. 定义一个实现类,包含一个字符串字段str。
2. 在主程序中,创建一个实现类的集合list,添加若干个实现类对象。
3. 使用Stream API对集合进行排序,首先将集合中的元素按照纯数字和非数字分成两个集合,然后将纯数字的集合按照数字大小进行比较排序,最后将两个集合合并。
具体代码实现如下:
```
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class MyClass {
public static void main(String[] args) {
List<MyClass> list = new ArrayList<>();
list.add(new MyClass("123"));
list.add(new MyClass("abc"));
list.add(new MyClass("234"));
list.add(new MyClass("567"));
list.add(new MyClass("def"));
List<MyClass> sortedList = list.stream()
.sorted(Comparator.comparing(MyClass::isNumeric).reversed().thenComparing(MyClass::getStr))
.collect(Collectors.toList());
sortedList.forEach(obj -> System.out.println(obj.getStr()));
}
private String str;
public MyClass(String str) {
this.str = str;
}
public String getStr() {
return this.str;
}
public boolean isNumeric() {
for(int i = 0; i < this.str.length(); i++) {
if(!Character.isDigit(this.str.charAt(i))) {
return false;
}
}
return true;
}
}
```
以上代码中,MyClass类表示实现类,包含一个字符串字段str,以及获取str的方法getStr()和判断str是否为纯数字的方法isNumeric();主程序中创建了一个MyClass对象的集合list,并使用Stream API对其进行排序,按照isNumeric()的返回值分成两个集合,然后将纯数字的集合按照数字大小进行比较排序,最后将两个集合合并。最后输出排序后的结果。
输出结果为:
```
123
234
567
abc
def
```
字符串中的纯数字按照顺序排在前面,非数字排在后面。
阅读全文