小编Hen*_*sen的帖子

如何选择Backbone集合的属性

我想从Backbone集合中创建一个特定属性值的数组.

var days = _.select(
    this.collection.models,
    function(model) {
        return model.attributes.type === 'session';
    }
);

days = _.pluck(days, 'attributes'),
days = _.pluck(days, 'date');
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎效率低下.有没有办法在不必定义days三次的情况下完成同样的事情?

javascript backbone.js underscore.js backbone.js-collections

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

如何使用JUnit中的规则访问测试类的字段

我想编写一个JUnit @Rule(版本4.10)来设置一些对象(实体管理器),并通过将它"注入"变量使它们在测试中可用.

像这样的东西:

public class MyTestClass() {

  @Rule
  MyEntityManagerInjectRule = new MyEntityManagerInjectRule():

  //MyEntityManagerInjectRule "inject" the entity manager
  EntityManger em;

  @Test...
}
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何获取MyTestClassMyEntityManagerInjectRule中的当前实例(扩展TestRule),因为它只有一个方法. Statement apply(Statement base, Description description);

在Description内,只有MyTestClass类,但没有用于测试的实例.

另一种方法是使用org.junit.rules.MethodRule但不推荐使用.之前和之后不足以完成此任务,因为那时我需要将代码复制到测试中,并且它们或多或少都被弃用了.(参见Block4JClassRunner.withBefores/withAfters).

所以我的问题是如何在不使用弃用的东西的情况下访问测试类实例.

java junit

14
推荐指数
2
解决办法
3820
查看次数

在java中检测中文字符

使用Java如何检测String是否包含中文字符?

    String chineseStr = "???" ;

if (isChineseString(chineseStr)) {
  System.out.println("The string contains Chinese characters");
}else{
  System.out.println("The string contains Chinese characters");
}
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下这个问题吗?

java unicode encoding utf-8

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

如何委托杰克逊的自定义反序列化器中的默认反序列化?

假设我正在为某个类编写自定义序列化,但是希望使用默认方法处理其中一个字段.

怎么做?

虽然序列化我们有JsonGenerator#writeObjectField().

但是反序列化的相应方法是什么?

请注意以下代码:

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;
import java.util.Objects;

public class TryDelegate {

   public static class MyOuterClassSerializer extends JsonSerializer<MyOuterClass> {

      @Override
      public void serialize(MyOuterClass value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
         gen.writeStartObject();

         gen.writeObjectField("inner", value.getInner());

         gen.writeEndObject();
      }
   }

   public static class MyOuterClassDeserializer extends JsonDeserializer<MyOuterClass> {
      @Override
      public MyOuterClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {


         MyOuterClass ans = new MyOuterClass();

         JsonToken token;

         token = p.getCurrentToken();
         if( token != …
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson

14
推荐指数
1
解决办法
5246
查看次数

从Base64编码的字符串长度计算实际数据大小

给定编码为Base64编码字符串的数据,我能以某种方式计算通过查看Base64编码字符串的长度编码的原始数据的实际长度吗?

如果没有必要,我不想遍历字符串(这还包括对编码字符串的trailling字符进行字符串操作以检查填充).

base64

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

查询OrientDB中的嵌入列表

我的OrientDB数据库(版本1.0.1)中有一个文档,结构很像这样:

{
    "timestamp": "...",
    "duration": 665,
    "testcases": [
        {
            "testName": "test01",
            "type": "ignore",
            "filename": "tests/test1.js"
        },
        {
            "iterations": 1,
            "runningTime": 45,
            "testName": "test02",
            "type": "pass",
            "filename": "tests/test1.js"
        },
        ...
        {
            "testName": "test05",
            "type": "ignore",
            "filename": "tests/test1.js"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何在整个列表中查询,例如.如果我想查找包含"忽略"类型的测试用例的所有文档?

我尝试了以下查询

select from testresult where testcases['type'] = 'ignore'
Run Code Online (Sandbox Code Playgroud)

但这导致了NumberFormatException.

select from testresult where testcases[0]['type'] = 'ignore'
Run Code Online (Sandbox Code Playgroud)

工作,但显然只查看每个文档的第一个列表元素.

select from testresult where testcases contains(type = 'ignore')
Run Code Online (Sandbox Code Playgroud)

不提供任何结果,但查询被接受为有效.

更新: 如果测试用例存储为单独的文档而不是嵌入列表,则以下查询按预期工作.

select from testresult where testcases contains (type = 'ignore')
Run Code Online (Sandbox Code Playgroud)

java orientdb

9
推荐指数
1
解决办法
8148
查看次数

在没有循环的情况下随机获取HashMap或HashSet中的元素

我有大约420,000个元素需要存储在某种Set或List中.但是限制是我需要能够选择一个随机元素并且需要快速.

最初我使用了ArrayList和LinkedList,但是有很多元素它很慢.当我对它进行分析时,我看到equals()我存储的对象中的方法在很短的时间内被称为大约2100万次.

接下来我尝试了一个HashSet.我在性能方面获得的东西我在功能上松了一口气:我不能选择随机元素.HashSet由HashMap支持,HashMap由一组HashMap.Entry对象支持.然而,当我试图暴露它们时,我被整个Java Collections Framework的疯狂私有和包私有可见性所阻碍(即使复制和粘贴类也不起作用,JCF非常"使用我们拥有的东西或滚动你自己的东西").

随机选择存储在HashSet或HashMap中的元素的最佳方法是什么?由于集合的大小,我宁愿不使用循环.

重要编辑:我忘记了一个非常重要的细节:我究竟是如何使用Collection的.我在桌子的乞讨处填充整个收藏品.在程序中,我选择并删除一个随机元素,然后选择并删除一些更多的已知元素,然后重复.不断查找和更改是导致缓慢的原因

java collections hashmap hashset

8
推荐指数
1
解决办法
7693
查看次数

Jackson TypeFactory静态方法已弃用使用什么?

杰克逊的Typefactory类里面有很多不赞成使用的方法.我这样使用它:

public List<T> getX(Class<T> clz) {
    ObjectMapper mapper = new ObjectMapper();
    try {
        String jsonData = mapper.writeValueAsString(data);
        a = mapper.readValue(jsonData, TypeFactory.collectionType(List.class, clz));
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return a;// a is a global variable
}
Run Code Online (Sandbox Code Playgroud)

它警告我,collectionType弃用.用什么而不是它?

java jackson

8
推荐指数
1
解决办法
7088
查看次数

DebuggerStepThrough等效于Java

.NET有一些方便的注释,指示调试器逐步执行某些方法.我想知道是否有一个可以在Java平台上运行的等价物.

例如:

@DebuggerStepThrough
public void foo() {
  ..
}
Run Code Online (Sandbox Code Playgroud)

会导致调试器在步进时不会停止foo.

我尝试了什么

  • 在类文件中使用SYNTHETIC标志.这导致javac禁止用户代码调用此类方法.
  • 自定义属性.没有JDI API来检索注释.在这个论坛上也提到过.

PS.我正在实现一个调试器并控制发出的字节码

java debugging jdi jvmti

8
推荐指数
1
解决办法
165
查看次数

替换新方法dexlib2失败

我正在使用dexlib2通过一个jar实用程序重写现有的apk.我想用自己的指令改变一条指令.它基本上返回一些对象,我想用另一个返回不同对象的方法替换它.它能够替换方法但是当我查看更新的dex时,我可以看到下一行.local v1,manager:Lblah/KeyguardManager;

我要替换的代码

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
Run Code Online (Sandbox Code Playgroud)

应根据上述替换的代码:

Manager mgr=Manager.getInstance(this)
Run Code Online (Sandbox Code Playgroud)

我用getInstructionRewriter方法替换它.它取代了方法,但我无法弄清楚如何替换.local v1,manager:Lblah/KeyguardManager; 与.local v1,经理:Lblah /经理;

java android dex smali

8
推荐指数
1
解决办法
253
查看次数