使用java8我们如何对从第二个元素开始到最后一个元素的元素进行排序?
list.stream().filter(student -> student.getAge()!=15).sorted(Comparator.comparing(student->student.getAge())).collect(Collectors.toList());
最终排序列表应包含所有元素,包括第一个元素。
我已尝试过以上代码段:
这里我不想触及第一个元素。上面的代码是从第二个元素到最后一个元素的排序。问题是我没有得到输出中的第一个元素(年龄= 15)。
如果我不应用过滤器,它将对所有元素进行排序,我将松开第一个元素,这不应该发生。
请帮助我。谢谢。
答案 0 :(得分:4)
List<Student> result = Stream.concat(
list.stream().findFirst().map(Stream::of).orElse(Stream.empty()),
list.stream().skip(1).sorted(Comparator.comparing(Student::getAge)))
.collect(Collectors.toList());
System.out.println(result);
答案 1 :(得分:2)
您可以使用List.subList
方法跳过列表的第一个元素:
List<Student> result = list.isEmpty() ? new ArrayList<>() : // or just list
Stream.concat(
Stream.of(list.get(0)),
list.subList(1, list.size()).stream()
.sorted(Comparator.comparing(Student::getAge)))
.collect(Collectors.toList());
答案 2 :(得分:2)
重新思考Stream API是否是最佳选择:
List<Student> result = new ArrayList<>(list);
result.subList(1, list.size()).sort(Comparator.comparing(Student::getAge));
请注意,如果源列表是可变的并且您不需要原始列表顺序,则可以仅使用上面代码片段的第二行直接在源列表上执行操作。
答案 3 :(得分:0)
试试这个,你可以在处理整个列表后过滤第一个元素:
inputx.split("\n").map{|s| s.split(/;-?/)}
#=> [[" baseball", "1"], [" norm", "4"], [" dad", "3"], [" soda", "1"], [" robot", "8"], [" mmm", "3"], [" fly", "1"], [" cat", "4"], [" bird", "4"], [" dragon", "6"], [" mor", "1"]]