小编Luk*_*Feo的帖子

如何延迟执行android

我正在构建一个具有AI功能的Android棋盘游戏.AI转向并且必须调用一系列操作,之后它会向我的自定义视图发布无效更新.

我需要减慢这些动作,以便用户看到AI轮到而不是闪烁.

我试过这些方面的东西

    try {
        doFirstThing();
        Thread.sleep(500)
        //post invalidate

        doNextThing();
        Thread.sleep(1000)
        //post invalidate
     }
     catch (Exception e) {
     }
Run Code Online (Sandbox Code Playgroud)

然而,这绝对没有效果.如果这不明显,这也是在一个单独的线程中运行.

什么是我最好的选择我看过处理程序,但他们不需要正确,因为我需要按顺序执行一系列任务每次更新视图.

multithreading android postdelayed

16
推荐指数
2
解决办法
2万
查看次数

在IntelliJ中运行单元测试,类中有错误

我是使用IntelliJ的新手.我只有一个委屈,那就是编译器.我更喜欢Eclipse编译器编译项目的方式并跳过包含错误的类.

如果我想为一个方法编写一个单元测试,我必须修复整个项目中的所有错误以运行单个单元测试,这尤其是一个问题!

您可能会说修复您的项目,但我正在开发一个项目,其中人们已经在其中提交了包含错误的代码.我怎么能解决这个问题,我看到有一个选项可以在设置中使用Eclipse编译器,但这没有区别/我不知道跳过错误的参数.

unit-testing compiler-errors intellij-idea

13
推荐指数
2
解决办法
4633
查看次数

当对象Hashcode发生更改时,Hashmap或Hashset中的查找会发生什么

在Hashmap中,提供的密钥的哈希码用于将值放在哈希表中.在Hashset中,obects哈希码用于将值放在底层哈希表中.也就是说,hashmap的优点是你可以灵活地决定你想要什么作为键,这样你就可以做到这样的好事.

Map<String,Player> players = new HashMap<String,Player>();
Run Code Online (Sandbox Code Playgroud)

这可以将诸如玩家名称之类的字符串映射到玩家本身.

我的问题是当密钥的Hashcode发生变化时,查找会发生什么.

我希望这不是Hashmap的主要问题,因为我不希望也不希望密钥发生变化.在前面的例子中,如果球员名称发生变化,他就不再是那个球员了.但是我可以使用密钥更改其他不是名称的字段来查看播放器,将来的查找将起作用.

但是在Hashset中,由于整个对象的哈希码用于放置项目,如果某人略微更改了对象,则该对象的未来查找将不再解析为Hashtable中的相同位置,因为它依赖于整个对象Hashcode.这是否意味着一旦数据在Hashset中就不应该被更改.还是需要重新加入?还是自动完成等?到底是怎么回事?

java hash hashmap hashcode hashset

10
推荐指数
1
解决办法
2834
查看次数

一致性哈希,为什么需要 Vnode?

我对一致性哈希的理解是,您采用一个密钥空间,对密钥进行哈希处理,然后按 360 进行取模,然后将值放入一个环中。然后,在该环上均匀分布节点。您可以通过从散列密钥所在的位置顺时针查看来选择处理该密钥的节点。

然后在许多解释中他们继续描述Vnode。在引用 dynamo 论文的riak 文档中,他们说:

The basic consistent hashing algorithm presents some challenges. First, the random position assignment of each node on the ring leads to non-uniform data and load distribution.
Run Code Online (Sandbox Code Playgroud)

然后他们继续提出 Vnodes 作为确保输入密钥空间在环周围均匀分布的一种方法。据我了解,要点是 Vnode 划分范围的次数比机器多得多。假设您有 10 台机器,则可能有 100 个 Vnode,并且单个机器的 Vnode 将随机分散在环周围。

现在我的问题是为什么需要这个额外的 Vnode 步骤。哈希函数应该提供其输出的均匀分布,因此这似乎是不必要的。根据这个答案,即使哈希函数的模仍然是均匀分布的。

distributed-computing distributed-system consistent-hashing

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

如何设置没有setter的属性值

我已经看到了各种问题并回答了我们可以使用这样的反射来调用私有的setter:

是否有可能通过反思得到一个房产的私人制定者?

但是我有一些代码,它有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码.在这种情况下,有没有办法以某种方式使用反射设置值?

c# reflection properties automatic-properties

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

Akka流通过流量限制并行性/处理流的吞吐量

我有一个用例,我想向外部系统发送消息,但是发送此消息的流程需要并返回我不能在下游使用的类型。这是传递流程的绝佳用例。我在这里使用实现。最初,我担心如果processingFlow使用mapAsyncUnordered,那么此流程将无法正常工作。由于处理流程可能会重新排序消息,并且zip可能会推出带有不正确对的元组。例如,在以下示例中。

  val testSource = Source(1 until 50)
  val processingFlow: Flow[Int, Int, NotUsed] = Flow[Int].mapAsyncUnordered(10)(x => Future {
    Thread.sleep(Random.nextInt(50))
    x * 10
  })
  val passThroughFlow = PassThroughFlow(processingFlow, Keep.both)

  val future = testSource.via(passThroughFlow).runWith(Sink.seq)
Run Code Online (Sandbox Code Playgroud)

我希望处理流程可以相对于其输入重新排序其输出,并且我将得到如下结果:

[(30,1), (40,2),(10,3),(10,4), ...]
Run Code Online (Sandbox Code Playgroud)

与右边(通过始终总是按顺序通过),但通过我的mapAsyncUnordered的左边可能与不正确的元素连接在一起,从而形成错误的元组。

相反,我实际上得到:

[(10,1), (20,2),(30,3),(40,4), ...]
Run Code Online (Sandbox Code Playgroud)

每次。经过进一步调查,我发现代码运行缓慢,尽管我的地图异步无序,但实际上根本没有并行运行。我尝试在异步边界前后引入一个缓冲区,但是它似乎总是按顺序运行。这解释了为什么总是订购但我希望我的处理流程具有更高的吞吐量。

我想出了以下解决方法:

object PassThroughFlow {

  def keepRight[A, A1](processingFlow: Flow[A, A1, NotUsed]): Flow[A, A, NotUsed] =
    keepBoth[A, A1](processingFlow).map(_._2)

  def keepBoth[A, A1](processingFlow: Flow[A, A1, NotUsed]): Flow[A, (A1, A), NotUsed] =
    Flow.fromGraph(GraphDSL.create() { implicit builder => {
      import GraphDSL.Implicits._

      val broadcast …
Run Code Online (Sandbox Code Playgroud)

scala akka akka-stream

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

无法在同一网络上与Android设备进行ping /通信

我有一个运行CM10.1的nexus 7.出于某种原因,我无法通过我的笔记本电脑在同一个wifi网络上访问它.我无法向任何一个方向发牢骚.在过去,我只能用一种方式ping.

刚尝试了我的股票HTC感觉并没有同样的问题.此外,nexus和htc也无法相互接触.

我与其他Android设备有类似的问题,在过去我正在开发一个应用程序,我无法建立从Android设备到我的电脑的套接字连接.一旦我能够成功ping通笔记本电脑,我的设备一切正常.

这不是持久的,在过去我摆弄他们最终谈论但当时没有一致的解决方案,我从来没有找到根本原因.

我已经在2个不同的wifi网络上看到了这一点

不知道这里发生了什么,我对网络的理解并不是那么深刻.

networking android network-programming ping icmp

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

如何在java中使用数据流文本io动态目的地

您好,我对动态文件目标 api 感到非常困惑,并且没有文档,所以我在这里。

情况是我有一个 PCollection,它包含属于不同分区的事件。我想将它们分开并将它们写入gcs中的不同文件夹。

这是我所拥有的。

动态目标对象:

  class GCSDestinationString(prefix: String) extends DynamicDestinations[Event, String, String] {

    override def getDestination(element: Event): String = {
      element.partition //this returns a string which is a gcs folder path
    }

    override def getFilenamePolicy(destination: String): FileBasedSink.FilenamePolicy = {
      println(destination)
      val overallPrefix = s"$prefix/$destination/part-"
      DefaultFilenamePolicy.fromStandardParameters(
        ValueProvider.StaticValueProvider.of(
          FileSystems.matchNewResource(overallPrefix, false)),
        null, ".jsonl", true)
    }

    override def formatRecord(record: Event): String = {
      implicit val f = DefaultFormats
      write(record.toDataLakeFormat())
    }

    override def getDefaultDestination: String = "default"
  }
Run Code Online (Sandbox Code Playgroud)

我相信这是正确的逻辑,我询问每个元素的目标分区是什么,然后将其传递到 getFileNamePolicy 并从那里构建文件名。要格式化记录,我只是将其转换为 json。

问题是将它与 …

scala google-cloud-dataflow apache-beam

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

缩小/折叠在monoid列表上,但是reducer返回

我已经遇到过几次我有减速器/结合fn的情况,如下所示:

  def combiner(a: String, b: String): Either[String, String] = {
    (a + b).asRight[String]
  }
Run Code Online (Sandbox Code Playgroud)

它是一个虚拟实现,但是fn可能失败,因此它返回一个。然后,我有了一个要通过reduce / fold传递的值的列表。我能想到的最好的方法(假设List的类型是一个monoid)是这样的:

  def combine(items: Vector[String]) = {

    items.foldLeft(Monoid[String].empty.asRight[String]) { case (acc, value) =>
      acc.flatMap( accStr => combiner(accStr, value))
    }
  }
Run Code Online (Sandbox Code Playgroud)

它有点笨拙,并且作为一种相当通用的模式,我怀疑有更好的方法来使用猫。

functional-programming scala scala-cats

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

'required'initulator'init(coder :)'必须由UIViewController的子类提供

我知道还有其他类似的问题但没有回答我的问题.

所以我有一个ViewController,其布局在XIB中定义.从另一个ViewController我想做这样的事情

let destVc = DestViewController(model:someModelData)
self.showViewController(destVc,...)
Run Code Online (Sandbox Code Playgroud)

和DestViewController的定义如下:

class DestViewController : UITableViewController {
    var model: SomeModelData {
        didSet {
            self.tableView.reloadData()
        }
    }

    init(model: SomeModelData) {
        self.model = model
        super.init(style: .Plain)

    }

   //...implementation below
}
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是因为

1)我不想为这个视图控制器肯定需要的模型数据使用选项或隐式解包的选项,实际上这个模型数据构成了它的合同的一部分

2)这让我了解了在初始化程序中拥有模型的另一个好处,它为任何想要创建其中一个ViewControllers的人定义了一个明确的契约,由swift的强类型系统强化.

问题是这不会编译,xcode说:

 'required' initializer 'init(coder:)' must be provided by subclass of UIViewController
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪,因为在UIViewController的文档中它并没有将init(编码器)声明为"必需的"初始化器,它是一个指定的初始化器,但是在swift手册中没有说我必须覆盖指定的初始化器只需要那些.

这里发生了什么我需要添加:

required init?(coder aDecoder: NSCoder) {

}
Run Code Online (Sandbox Code Playgroud)

为了使它工作?

请注意,这是UITableViewController的swift doc,当我单击它时,它出现在xcode中.注意在initWithCoder之前缺少 'required'

public class UITableViewController : UIViewController, UITableViewDelegate, UIScrollViewDelegate, UITableViewDataSource {

    public init(style: UITableViewStyle)
    public init(nibName nibNameOrNil: String?, bundle …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch ios swift

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