首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用流按值从方法返回的值排序

使用流按值从方法返回的值排序
EN

Stack Overflow用户
提问于 2017-03-11 14:42:14
回答 2查看 53关注 0票数 1

我有一个方法,它返回一个单元可以感知的环境对象的列表,但是它不会按照最接近的顺序返回它们:

代码语言:javascript
复制
    List<Environment> = gameWorld.returnEnvironmentInCircle(unit.getLocation(), unit.getType().getSensorRadius());

我希望创建这个列表的一个流,并按照以下值对其重新排序:

代码语言:javascript
复制
    unit.getLocation().distanceTo(environment.getLocation())

该函数的作用是简单地计算感知环境的单元与它所感知的环境对象之间的距离。

这是我的尝试,但显然行不通:

代码语言:javascript
复制
           List<Environment> environmentList = gameWorld.returnEnvironmentInCircle(unit.getLocation(), unit.getType().getSensorRadius());
           List<Environment> environmentStream =   environmentList.stream()
                                            .sorted(environment -> unit.getLocation().distanceTo(environment.getLocation()));
           return environmentStream;

我肯定这里有很多问题,所以我很感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-11 14:49:03

您似乎有正确的想法,但您忘记了创建要在sotrted方法中使用的sotrted,并将流收集回列表:

代码语言:javascript
复制
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)

代码语言:javascript
复制
List<Environment> environmentList = 
    gameWorld.returnEnvironmentInCircle(unit.getLocation(), 
                                        unit.getType().getSensorRadius());

environmentList.sort(
    Comparator.comparing(
        unit -> unit.getLocation().distanceTo(environment.getLocation()));
票数 2
EN

Stack Overflow用户

发布于 2017-03-11 14:47:31

sorted()期望有一个比较器。比较器基本上是一个函数,它接受两个Environment对象并返回一个整数。您正在传递一个函数,该函数接受单个环境,并返回一个距离。

此外,您还试图将一个Stream<Environment>分配给List<Environment>类型的变量

不过,你已经不远了:

代码语言:javascript
复制
List<Environment> sortedList = 
    environmentList.stream()
                   .sorted(Comparator.comparing(environment -> unit.getLocation().distanceTo(environment.getLocation())))
                   .collect(Collectors.toList());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42736507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档