我有一个方法,它返回一个单元可以感知的环境对象的列表,但是它不会按照最接近的顺序返回它们:
List<Environment> = gameWorld.returnEnvironmentInCircle(unit.getLocation(), unit.getType().getSensorRadius());我希望创建这个列表的一个流,并按照以下值对其重新排序:
unit.getLocation().distanceTo(environment.getLocation())该函数的作用是简单地计算感知环境的单元与它所感知的环境对象之间的距离。
这是我的尝试,但显然行不通:
List<Environment> environmentList = gameWorld.returnEnvironmentInCircle(unit.getLocation(), unit.getType().getSensorRadius());
List<Environment> environmentStream = environmentList.stream()
.sorted(environment -> unit.getLocation().distanceTo(environment.getLocation()));
return environmentStream;我肯定这里有很多问题,所以我很感谢你的帮助!
发布于 2017-03-11 14:49:03
您似乎有正确的想法,但您忘记了创建要在sotrted方法中使用的sotrted,并将流收集回列表:
List<Environment> environmentList =
gameWorld.returnEnvironmentInCircle(unit.getLocation(),
unit.getType().getSensorRadius());
List<Environment> sortedEnvironmentList =
environmentList.stream()
.sorted(Comparator.comparing(
unit -> unit.getLocation()
.distanceTo(environment.getLocation()))
.collect(Collectors.toList());虽然这应该有效,但值得注意的是,使用流有点过分--您可以直接使用List#sort(Comparator):
List<Environment> environmentList =
gameWorld.returnEnvironmentInCircle(unit.getLocation(),
unit.getType().getSensorRadius());
environmentList.sort(
Comparator.comparing(
unit -> unit.getLocation().distanceTo(environment.getLocation()));发布于 2017-03-11 14:47:31
sorted()期望有一个比较器。比较器基本上是一个函数,它接受两个Environment对象并返回一个整数。您正在传递一个函数,该函数接受单个环境,并返回一个距离。
此外,您还试图将一个Stream<Environment>分配给List<Environment>类型的变量
不过,你已经不远了:
List<Environment> sortedList =
environmentList.stream()
.sorted(Comparator.comparing(environment -> unit.getLocation().distanceTo(environment.getLocation())))
.collect(Collectors.toList());https://stackoverflow.com/questions/42736507
复制相似问题