我有一个这样的代码
@Data
public class person{
String firstName;
String lastName;
int orderNum;
}
List<person> personList = new ArrayList<person>();
我试图排序对象,并试图根据订单号得到Map。
我写了一个逻辑这些这并没有为我工作
Map<String, String> xza = personList.stream()
.sorted(Comparator.comparing(refDataDto::getOrderNum))
.collect(Collectors.toList())
.stream()
.collect(Collectors.toMap(refDataDto::getFirstName, refDataDto::getastName));
2条答案
按热度按时间iqxoj9l91#
您正在根据订单号对列表进行排序,将其收集到列表中,从列表创建流,然后将流收集到未排序的Map中。默认情况下,Map不保留键-值对的插入顺序。
你需要的是一个LinkedHashMap,但由于没有现成的收集器助手,you have to set it up manually(你不需要收集数据到一个列表中):
此外,由于您正在处理包含
Person
对象的流,因此lambda表达式需要引用Person
类,而不是refDataDto
。ljo96ir52#
Collectors.toMap(key,value)
,将默认创建一个无序的HashMap
。您必须使用LinkedHashMap
来按照与插入的元素相同的顺序对其进行排序。另外,
.collect(Collectors.toList()).stream()
也没有用。sorted
会给你一个排序的流,在它上面,你要把它转换成一个列表,然后再转换回流,所以它是无用的。因此,尝试使用4个参数而不是2个参数的
Collectors.toMap
重载方法:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java.util.function.Function-java.util.function.Function-java.util.function.BinaryOperator-java.util.function.Supplier-