小编ver*_*tti的帖子

类型在Scala中作为键的键

我的游戏有

class Enemy
Run Code Online (Sandbox Code Playgroud)

谁可以改变我的人工智能/功能

trait Moving
trait VerticalMover extends Moving
trait RandomMover extends Moving
Run Code Online (Sandbox Code Playgroud)

等等.现在我需要根据特征获取预加载的东西.我想要做的是有一个Map接受所有特征,这些特征扩展了Moving作为键,然后是一些EnemyContainer作为预先加载特征相关内容的值.

但是我如何定义这样的Map以及如何格式化我的.get()以通过某个Enemy的实例来获取容器.就像是:

val myEnemy = new Enemy with RandomMover 
val myDetails:EnemyContainer = enemyDetailsStore.get(myEnemy.getClass)
Run Code Online (Sandbox Code Playgroud)

types scala class map

8
推荐指数
2
解决办法
6454
查看次数

将pojo字段复制到另一个pojo的setter

比方说,我有一流的A公共领域xy.让我们说我有另一个pojo类,B但它使用setter和getter,所以它有setX()和setY().

我想使用一些自动方式从实例复制AB后端.

至少使用默认设置,Dozer's

   Mapper mapper = new DozerBeanMapper();
   B b = mapper.map(a, B.class);
Run Code Online (Sandbox Code Playgroud)

不会正确复制字段.

那么是否有一个简单的配置更改,允许我使用Dozer或其他库来完成上述操作?

java pojo dozer

7
推荐指数
1
解决办法
5205
查看次数

使用Java8流api将函数列表应用于值

我想要一个单独的日志消息pojo LoggedExchange并应用一堆转换.转换是列表中的UnaryOperators:

List<ConditionalTransform> transforms = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

其中,ConditionalTransform农具UnaryOperator<LoggedExchange>和我目前的解决方案是使用减少这样的:

public LoggedExchange transform(LoggedExchange original) {
    return transforms.stream().reduce(original, (o, t) -> t.apply(o), (m1, m2) -> m2);
}
Run Code Online (Sandbox Code Playgroud)

并行运行这个没有意义,因为没有办法将两个消息组合在一起((m1,m2) -> m2只是为了让编译器满意).

有没有更好的方法来做到这一点(就像以某种方式组成所有ConditionalTranforms?),如果没有,该combiner函数是否会抛出异常或其他因为我不能支持并行执行?

JavaDoc中指出,大多数这些操作有可能需要做mapreduce,但我看不出如何.

java reduce java-8

6
推荐指数
1
解决办法
3217
查看次数

在Scala上使我的List.filter更快?

我正和Scala一起玩游戏.

我的游戏有几个游泳池来保持敌人.它们是不可变列表,因为它们被初始化为足够的大小(因为在游戏期间创建新的敌人实例非常昂贵).

我的游戏通过询问知道敌人是否还活着enemy.isVisible.所以我的CollisionHandler的工作方式如下:

  1. 将所有活的敌人组合到一个列表中
  2. 得到实弹
  3. 空间划分这些并对同一空间分区中的子弹和敌人进行碰撞检测

让我感到沮丧的是,根据剖析器,步骤1占用了大部分时间.那一步的作用基本上是说:

def allActiveEnemies = List(enemyType1.getAllActive, enemyType2.getAllActive, ... ).flatten
Run Code Online (Sandbox Code Playgroud)

flatten似乎并不昂贵,但它得到getAllActive调用.它们是在我的Pooled特性中实现的,如下所示:

trait Pooled[T <: Entity] {
    var pool = List[T]()
    val INITIAL_POOL_SIZE:Int

    def initPool() {
        for(i<-1 to INITIAL_POOL_SIZE)
        {
            addToPool(disable(createNew))
        }
    }

    def getAllActive:List[T] = pool.filter(e => e.isVisible)
}
Run Code Online (Sandbox Code Playgroud)

(我省略了大部分特性,因为我觉得这不相关.)

pool.filter是在CollisionHandler花费的总时间的45%,这看起来很奇怪.

有什么建议让这里更快吗?

也许使用ArrayLists而不是List?也许使用一些排序和可变集合?或者我只是在做一些可怕的错误?

谢谢!

performance scala list filter

5
推荐指数
1
解决办法
970
查看次数

将地图展平为valargs Scala中的字符串列表

Java事件日志记录(分析)库有一个方法,它接受事件名称,然后是字符串的varargs列表,如下所示:

Analytics.event("my event name", "key1", "value1", "key2", "value2" ...)
Run Code Online (Sandbox Code Playgroud)

我已将我的事件参数收集到Map中

Map("key1" -> "value1", "key2" -> "value2" ...)
Run Code Online (Sandbox Code Playgroud)

现在必须有一种方法来展平Map键和值交替的列表,然后将其提供给事件方法.我已经进行了几次猜测,比如转换Map为列出ListTuples,但是调用.flatten就可以了

No implicit view available from (java.lang.String, java.lang.String) => scala.collection.TraversableOnce[B]
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

dictionary scala variadic-functions flatten

5
推荐指数
2
解决办法
2182
查看次数

使用未发布的应用测试Android应用内购买

我正在使用AndroidBillingLibrary为我的游戏实施应用内购买.

我做了以下事情:

  • 将我的公钥从Market添加到我的应用程序中
  • 将已签名且应用内购买的apk上传到市场(未发布)
  • 在市场控制台中创建了一个应用内商品(未发布)
  • 在我的个人资料中添加了测试用户帐户

现在有了测试帐户,我开始玩游戏并尝试进行应用内购买.我得到了市场屏幕,我可以看到项目的详细信息(因此市场确认项目ID,因为这些细节只在市场上,而不是在我的游戏中)但是我得到一个弹出窗口,上面写着"你试图的项目购买无法找到." 我回到了我的游戏中.

现在,此页面告诉我"另外,只有在项目发布时,测试帐户才能购买产品列表中的项目.该应用程序不需要发布,但该项目确实需要发布."

但市场控制台告诉我:

"在应用程序产品发布之前,应用内产品将显示为UNPUBLISHED,此时应用内商品的发布状态适用."

因此,在发布我的游戏之前,我无法将应用内商品更改为已发布(我还不想这样做).

如何在不发布游戏的情况下测试购买应用内商品?

android in-app-purchase

5
推荐指数
1
解决办法
4853
查看次数

奇怪的复制构造函数

我有两个班:AbstractMailingDirectionsDirectionLoad.两者都有一个拷贝构造函数如下:

public AbstractMailingDirections(AbstractMailingDirections toCopy) {
    this.message = toCopy.message;
    this.defaultDirection = new DirectionLoad(toCopy.defaultDirection);
    for (final DirectionLoad dls : toCopy.directionLoads) {
        this.directionLoads.add(new DirectionLoad(dls));
    }
}
Run Code Online (Sandbox Code Playgroud)

public DirectionLoad(DirectionLoad toCopy) {
    this.direction = toCopy.direction;
    this.transportationContract = toCopy.transportationContract;
    this.pickUpTime = toCopy.pickUpTime;
    this.acceptanceTime = toCopy.acceptanceTime;
    this.acceptanceLocation = toCopy.acceptanceLocation;
    this.information = toCopy.information;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我调用MailingDirections复制构造函数(这只是super(toCopy))时,我有时不会得到defaultDirection复制的字段.或者不是全部.使用Eclipse调试器甚至更奇怪:

调试器 在这里,我点击了AbstractMailingDirections要复制的内容.看看印刷品中的defaultDirection.acceptanceTime17:00 如何,toString但显示null在字段列表中.如果我单击defaultDirection,它的toStringprint将显示该acceptanceTime字段为null.

这让我疯了.可能导致这种情况的任何想法?

java constructor

5
推荐指数
1
解决办法
156
查看次数

CDK 中的 SQS 接口端点

使用 AWS-CDK。我必须将写入 SQS 的 Lambda 移至 VPC 内。我添加了接口网关,以允许通过以下方式从 VPC 直接连接到 SQS:

props.vpc.addInterfaceEndpoint('sqs-gateway', {
  service: InterfaceVpcEndpointAwsService.SQS,
  subnets: {
    subnetType: SubnetType.PRIVATE,
  },
})
Run Code Online (Sandbox Code Playgroud)

Lambda 部署到同一个 VPC(默认情况下部署到同一个私有子网),并且我将 QUEUE_URL 作为 env 参数传递,就像没有 VPC 时一样:

const ingestLambda = new lambda.Function(this, 'TTPIngestFunction', {
      ...
  environment: {
    QUEUE_URL: queue.queueUrl,
  },
  vpc: props.vpc,
})
Run Code Online (Sandbox Code Playgroud)

Lambda 代码简单地发送消息:

const sqs = new AWS.SQS({ region: process.env.AWS_REGION })

return sqs
  .sendMessageBatch({
    QueueUrl: process.env.QUEUE_URL as string,
    Entries: entries,
  })
  .promise()
Run Code Online (Sandbox Code Playgroud)

如果没有 VPC,此发送可以工作,但现在 Lambda 只是在发送 SQS 消息时超时。我在这里缺少什么?

amazon-sqs amazon-web-services aws-cdk

5
推荐指数
1
解决办法
2436
查看次数

在应用程序内的Android市场上评价应用程序

Android Market评级对应用开发者非常重要.我经常看到应用程序说"请考虑给我们评分",然后按下"Ok带我上市"/"不是现在"的按钮.

我想要做的是在我的应用程序中向用户显示评级栏(如http://kozyr.zydako.net/wp-content/uploads/2010/05/defaultRatingBar.png)并让用户在里面进行评级我的应用程序,而不是将他送到市场.

无论如何这样做?

android rating google-play

4
推荐指数
1
解决办法
2795
查看次数

使用 SASS/SCSS 扩展和覆盖现有样式

我正在使用 sass bootstrap 3。我想让我的按钮使用与身体其他部位不同的字体。但是按钮从 body 继承了它们的字体。

  • 我想使用 Bootstrap 的默认按钮样式,而不是创建新的按钮样式
  • 我想.scss保持引导文件不变

我目前有自己的main.scss覆盖颜色等,然后​​导入引导程序 scss。像这样:

$border-radius-small:            0px;

@import 'sass-bootstrap/lib/bootstrap';
Run Code Online (Sandbox Code Playgroud)

现在,目前我在导入之后有类似的东西:

.demibold {
  font-family: 'The Message DemiBold';
}
Run Code Online (Sandbox Code Playgroud)

但后来我必须有这样的按钮:

<button id="loginButton" type="button" class="btn btn-primary btn-lg demibold">
Run Code Online (Sandbox Code Playgroud)

我可以向我添加一些东西来main.scss改变例如的定义,btn所以我不需要demibold为每个按钮添加样式。

css sass twitter-bootstrap twitter-bootstrap-3

3
推荐指数
1
解决办法
8595
查看次数