我正在使用Java-8 lambda对列表进行排序。如何在JAVA8 lambda中使用条件进行排序
这里是后排序
[(t2, tester2), (t1, tester1), (t3, tester3), (t4, tester4)]
我想要得到的结果如上
String specialId = 't2'
List<Test> list = new ArrayList<>();
Test test1 = new Test();
test1.setId = "t1"
test1.setName = "tester1"
list.add(test1)
Test test2 = new Test();
test2.setId = "t4"
test2.setName = "tester4"
list.add(test2)
Test test3 = new Test();
test3.setId = "t3"
test3.setName = "tester3"
list.add(test3)
Test test4 = new Test();
test4.setId = "t2"
test4.setName = "tester2"
list.add(test4)
Stream<Test> s1 = list.stream.filter(t -> t.getId.equals(specialId));
Stream<Test> s2 = list.stream.filter(t -> !t.getId.equals(specialId))
.sorted(Comparator.comparing(Test::getName));
Stream<Test> s = Stream.concat(s1, s2);
List<Test> result = s.collect(Collectors.toList());
我得到预期的结果
[(t1, tester1), (t4, tester4), (t3, tester3), (t2, tester2)]
名单。但我只想使用一次流。 我如何分类?
是项T2首先,因为它是唯一的例外,还是有更多的一般方法的项目先去哪个? – wumpz
在这种情况下,没有流可能会更简单:'List result = new ArrayList <>(list); result.sort(...);'你可以在[...]中使用[kennytm's answer](http://stackoverflow.com/a/42575546/2711488)的比较器。 –
Holger