小编Ale*_*lov的帖子

枚举而不是Java中的常用类

在处理项目时,我遇到了一项任务,即设计一组实现定义简单操作的接口的类.通常这些类会按特定顺序完成它们的工作,但是同时只能从其中一个调用方法的可能性也是必需的.

考虑到以上所有因素并考虑到: - 每个类都有相当基本的逻辑 - 不需要扩展另一个类 - 将所有类放在一个文件中可能很方便 - 在需要时编辑源文件不是问题

我提出了以下解决方案(实际课程不是那么做作,但下面的例子足以给你一些基本的想法):

public enum Bestiary {
DOG(1) {
    @Override
    void makeNoise(Loudspeaker ls) {
        ls.shoutOutLoud("I am alpha dog");
    }
},

CAT(2) {
    @Override
    void makeNoise(Loudspeaker ls) {
        ls.shoutOutLoud("I am beta cat");
    }
},

RAT(3) {
    List<String> foods = new ArrayList<>();
    {
        foods.add("gods");
        foods.add("dogs");
        foods.add("cats");
        foods.add("other rats");
    }

    @Override
    void makeNoise(Loudspeaker ls) {
        StringBuilder cry = new StringBuilder("I am THE rat; usually I eat ");
        for (int i = 0; i < foods.size(); …
Run Code Online (Sandbox Code Playgroud)

java enums design-patterns

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

Elasticsearch 中通过数组元素进行匹配

我必须在 Elasticsearch 中构造一个相当重要的(就像现在看起来的那样)查询。假设我有几个实体,每个实体都有一个由字符串组成的数组元素:

1). ['A', 'B']
2). ['A', 'C']
3). ['A', 'E']
4). ['A']
Run Code Online (Sandbox Code Playgroud)

数组元素的映射如下(使用动态模板):

{
  "my_array_of_strings": {
    "path_match": "stringArray*",
    "mapping": {
      "type": "string",
      "index": "not_analyzed"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

实体的 Json 表示如下所示:

{
  "stringArray": [
    "A",
    "B"
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后我有用户输入:['A','B','C']。

我想要实现的是找到仅包含输入中指定元素的实体 - 预期结果是: ['A', 'B'], ['A', 'C'], ['A'] 但不是 [' A', 'E'](因为用户输入中不存在 'E')。

这个场景可以用Elasticsearch实现吗?

更新: 除了使用脚本的解决方案 - 应该可以很好地工作,但如果有许多匹配的记录,很可能会大大减慢查询速度 - 我还设计了另一种解决方案。下面我将尝试解释其主要思想,不涉及代码实现。

我没有提到的一个重要条件(这可能给其他用户提供了有价值的提示)是数组由枚举元素组成,即数组中此类元素的数量是有限的。这允许将此类数组展平为实体的单独字段。

假设有 5 个可能的值:“A”、“B”、“C”、“D”、“E”。这些值中的每一个都是一个布尔字段 - 如果为空则为 true(即数组版本将包含此元素),否则为 false。然后每个实体都可以重写如下:

1).
A = true
B = true
C = false
D = …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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

Intellij想法使用10001端口

默认情况下,Intellij IDEA 12 Public Preview正在监听其中一个插件的10001端口.在我们公司,我们使用这个端口用于其他目的,似乎没有简单的方法来改变这个...任何人都可以建议任何选择?谷歌搜索大约一个小时无济于事.

intellij-idea

3
推荐指数
2
解决办法
2555
查看次数

通过 CloudFormation 为现有表添加自动扩展到 AWS DynamoDB

我们的团队很高兴看到为 AWS DynamoDB 宣布了自动扩展功能,并且在通过在 Web 界面中添加配置进行尝试时,我们发现这非常符合我们应用程序的四个需求。

然而,事实证明,通过 CF 添加相同配置的尝试要复杂一些。本文中提供的以下示例 - http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-examples-application-autoscaling - 下面是结果,这是行不通的。堆栈详细信息:

17:02:25 UTC+0300 UPDATE_ROLLBACK_IN_PROGRESS AWS::CloudFormation::Stack my-stack The following resource(s) failed to create: [WriteCapacityScalableTarget]. 17:02:24 UTC+0300 CREATE_FAILED AWS::ApplicationAutoScaling::ScalableTarget WriteCapacityScalableTarget table/TableName|dynamodb:table:WriteCapacityUnits|dynamodb already exists 17:02:18 UTC+0300 CREATE_IN_PROGRESS AWS::ApplicationAutoScaling::ScalableTarget WriteCapacityScalableTarget
17:02:15 UTC+0300 CREATE_COMPLETE AWS::IAM::Role ScalingRole
17:01:42 UTC+0300 CREATE_IN_PROGRESS AWS::IAM::Role ScalingRole Resource creation Initiated 17:01:42 UTC+0300 CREATE_IN_PROGRESS AWS::IAM::Role ScalingRole
17:01:37 UTC+0300 UPDATE_IN_PROGRESS AWS::CloudFormation::Stack my-stack User Initiated

我的CF脚本如下:

{
  "Resources": {
    "MyCustomTableName": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "TableName": "TableName",
        "AttributeDefinitions": [
          {
            "AttributeName": "someAttribute1:someAttribute2", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation amazon-dynamodb autoscaling

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