小编Oli*_*ire的帖子

使用JaxRS自定义JSON序列化

在webservice调用中,我想用这个JSON结构返回我的对象​​.

{
  "date" : "30/06/2014",
  "price" : {
    "val" : "12.50",
    "curr" : "EUR"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将这个JSON代码映射到这个Java结构(使用joda-timejoda-money):

public class MyResponse {
  LocalDate date;
  Money price;
}
Run Code Online (Sandbox Code Playgroud)

我的网络服务目前看起来像这样:

@javax.ws.rs.POST
@javax.ws.rs.Path("test")
@javax.ws.rs.Produces({MediaType.APPLICATION_JSON})
@javax.ws.rs.Consumes({MediaType.APPLICATION_JSON})
public MyResponse test(MyRequest request) {
  MyResponse response = new MyResponse();
  response.setDate(LocalDate.now());
  response.setMoney(Money.parse("EUR 12.50"));
  return response;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我在哪里注册一个自定义处理程序来格式化我想要的日期以及货币表示?

java json jax-rs

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

Java中的diff实现

我正在寻找Java中的diff实现.我已经看到Python有自己的SequenceMatcher(带有difflib),这正是我需要的...在Java中.

有什么搬运工具吗?或者是否有其他类/库在Java中执行相同的操作?

如果没有,我在哪里可以找到该difflib的源代码(如果在语音中是免费的)来在Java中自己实现SequenceMatcher?

不幸的是,Apache Commons Lang对我帮助不大.

谢谢!

java diff

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

快速确定Python中的数字是否为数字<10亿

我目前用于检查python中数字素数的算法可以减慢1000万到10亿之间的数字.我希望它得到改善,因为我知道我永远不会得到超过10亿的数字.

上下文是我无法获得足够快的解决方案来解决项目Euler的问题60:我在75秒内得到问题的答案,我需要在60秒内完成.http://projecteuler.net/index.php?section=problems&id=60

我的内存很少,所以我无法存储10亿以下的所有素数.

我目前正在使用以6k±1调谐的标准试验部门.还有什么比这更好的吗?我是否已经需要使用Rabin-Miller方法来获得如此大的数字.

primes_under_100 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
def isprime(n):
    if n <= 100:
        return n in primes_under_100
    if n % 2 == 0 or n % 3 == 0:
        return False

    for f in range(5, int(n ** .5), 6):
        if n % f == 0 or n % (f + 2) == 0:
            return False …
Run Code Online (Sandbox Code Playgroud)

python primes python-3.x

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

是否有常量的正式定义?

Java规范是否定义了常量的原理,还是留给了推荐角色?

如果在规范中定义,它的定义是什么?

具体而言,以下任何或所有例子都被视为常数吗?如果确实存在部分或全部,是否按照规范或任何其他官方建议进行了考虑?

public static final int ONE = 1;
public static final double TWO = 2.0d;
public static final String THREE = "three";
public static final ImmutableList<Integer> ONE_TWO_THREE = ImmutableList.of(1, 2, 3);
public static final Logger logger = LogManager.getLogManager().getLogger(ThisClass.class);
Run Code Online (Sandbox Code Playgroud)

java jls

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

带有可选部分的Java 8 DateTimeFormatter

我有一个字符串代表日期(有或没有时间)喜欢13/12/201713/12/2017 15:39:51

所以我正在尝试将java 8 DateTimeFormatter与可选部分一起使用.

该代码有效

LocalDateTime localDateTime = LocalDateTime.parse("13/12/2017 15:39:51",DateTimeFormatter.ofPattern("dd/MM/yyyy[ HH:mm:ss]"));
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("HH:mm:ss")));

13/12/2017
15:39:51
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么那个没有

LocalDateTime localDateTime = LocalDateTime.parse("13/12/2017",DateTimeFormatter.ofPattern("dd/MM/yyyy[ HH:mm:ss]"));
Run Code Online (Sandbox Code Playgroud)

给我

Exception in thread "main" java.time.format.DateTimeParseException: Text '13/12/2017' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2017-12-13 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
...
Run Code Online (Sandbox Code Playgroud)

甚至还有

LocalDateTime localDateTime = LocalDateTime.parse("13/12/2017",DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Run Code Online (Sandbox Code Playgroud)

它不适用于相同的例外.

time java-8

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

对complexType而不是元素的唯一约束

我有以下XSD结构:

<xs:schema xmlns:ns="http://abc/">
  ...
  <xs:element name="abc">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="map"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  ...
  <xs:element name="map">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="entry" type="ns:MapEntryType" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="entry">
      <xs:selector xpath="entry"/>
      <xs:field xpath="key"/>
    </xs:unique>
  </xs:element>
  <xs:complexType name="MapEntryType">
    <xs:sequence>
      <xs:element name="key" type="xs:string"/>
      <xs:element name="value" type="xs:anyType"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

这是在做它的工作.

map现在必须根据包装器中的元素调用该元素,因此有时map,有时properties,有时options等名称.

因此,我想要对该map元素进行泛化.

我尝试过以下操作:

  • 制作map一个xs:complexType和变化reftype.
    • 这导致xs:unique不被接受和失败
  • 制作map一个xs:complexType,换reftype和移动xs:unique …

xsd

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

使用 Stream 从列表中查找与昂贵条件匹配的最后一个元素

我有大约一百万个元素的订单List,我正在寻找与特定条件匹配的最后一个元素,但条件计算起来很繁重,所以最好从末尾开始。总有大致log(n)匹配的元素,最少为 1 个。

我可以手动完成:

List<Element> elements = ...;
Element element = null;
for (var it = elements.listIterator(elements.size()); it.hasPrevious(); ) {
  var candidate = it.previous();
  if (heavyConditionPredicate.test(candidate)) {
    element = candidate;
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用Streams 来编写此代码,这样就heavyConditionPredicate不会针对列表中的每个元素进行测试?如果 HeavyConditionPredicate 的计算量不会那么大,我会使用替代方法,但我没那么幸运。

请注意,elements可以是 的任何类型List,并且我得到的不一定实现RandomAccess,因此通过索引访问列表可能也很昂贵。

java list java-stream

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

使用java.util.Formatter作为slf4j的默认格式化程序

我目前有一个内部使用的自定义日志管理器java.util.Formatter.主要问题是它不是很有用:每个应用程序在一个文件中的所有内容,无法在数据库中添加特定日志,无法发送邮件,......

所以我希望能够增加我们的日志记录系统的功能.经过几次测试后,Log4J正是我现在所需要的.但是我想避免将来再次重新改变它的痛苦,所以我打算在Log4J上使用slf4j.

即使我已准备好在我的所有代码库中进行大搜索/替换以使用slf4j,我还没准备好检查每个日志语句并重新格式化它以使用{}slf4j 的格式.

所以我的问题是:如何使用slf4j接口并告诉它内部应该使用a java.util.Formatter而不是默认值,最好是在一个地方(意味着不在每个类或包中)?

注意:所有关于表演的答案或说我不应该使用juFormatter的答案都将被抛弃:我需要一个务实的解决方案来解决我的问题,而不是开始辩论.

java logging formatter slf4j

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

使用Multibinding概括guice的机器人腿示例

我有这个用例非常类似于Guice的机器人腿例子,除了我不知道我有多少"腿".因此,我无法使用机器人腿示例所需的注释.

我期望在带有Guice的Multibindings扩展的java.util.Set中收集所有这些"leg".

从技术上讲,在PrivateModule中,我想直接将实现作为Multibindings扩展提供的集合的元素公开.我只是不知道该怎么做.

有关参考和代码示例,请参阅此处的robot-legs示例:http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions#How_do_I_build_two_similar_but_slightly_different_trees_of_objec


这是我的确切用例:

我有以下内容:

// Main application
public interface MyTree {...}
public interface MyInterface {
  public MyTree getMyTree() {}
}
public abstract class MyModule extends PrivateModule {}
public class MyManager {
  @Inject MyManager (Set<MyInterface> interfaces){ this.interfaces = interfaces }
}
public class MainModule extends AbstractModule {
  public void configure () {
    // Install all MyModules using java.util.ServiceLoader.
  }
}


// In expansion "square.jar"
public class SquareTree implements MyTree {...}
public class SquareImplementation implements MyInterface { …
Run Code Online (Sandbox Code Playgroud)

java guice multibinding robot-legs-problem

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

使用IntelliJ查找具有特定参数类型的所有方法调用

我有这个相当大的代码库(+/- 500k行).我正在查找它以查找使用单个参数的所有方法调用,并且该参数是特定类型.

这意味着,我希望能够找到如下方法调用:

public class Foo { }
public class Bar { }

public class Doer{
  public void doSomethingFoo(Foo foo) {  }
  public void doSomethingObject(Object object) {  }
}

public class Usage {
  Doer doer = new Doer();
  public doSomething() {
    Foo anObject = new Foo();
    Bar bar = new Bar();

    doer.doSomethingFoo(anObject);
    doer.doSomethingObject(anObject);

    doer.doSomethingObject(bar);
  }
}
Run Code Online (Sandbox Code Playgroud)

由于两个doer.doSomethingFoo(anObject)doer.doSomethingObject(anObject)被称为,这两个声明,应搜索将返回.同样,doer.doSomethingObject(bar)不归还.当然,我不知道doer存在.

我正在尝试使用IntelliJ的结构搜索来执行此操作.我使用了以下模板$Instance$.$Method$($Parameter$),其中包含以下参数:

$Instance$  -> Text/regexp   = .*
$Method$    -> Text/regexp   = .*
$Parameter$ -> …
Run Code Online (Sandbox Code Playgroud)

intellij-idea structural-search

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