小编tob*_*s_k的帖子

600851475143的"整数过大"错误消息

public class Three {
    public static void main(String[] args) {
        Three obj = new Three();
        obj.function(600851475143);
    }

    private Long function(long  i) {
        Stack<Long> stack = new Stack<Long>();

        for (long j = 2; j <= i; j++) {
            if (i % j == 0) {
                stack.push(j);
            }
        }
        return stack.pop();
    }
}
Run Code Online (Sandbox Code Playgroud)

运行上面的代码时,它会在行上产生错误obj.function(600851475143);.为什么?

java integer

76
推荐指数
6
解决办法
12万
查看次数

如何检查多个对象的无效?

通常,我可以看到如下代码构造:

if(a == null || b == null || c == null){
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何广泛使用的库(谷歌,阿帕奇等)同时检查多个对象的无效,例如:

if(anyIsNull(a, b, c)){
    //...
}
Run Code Online (Sandbox Code Playgroud)

要么

if(allAreNulls(a, b, c)){
    //...
}
Run Code Online (Sandbox Code Playgroud)

更新:

  1. 我完全知道如何自己写
  2. 我知道这可能是程序结构不佳的结果,但这不是一个案例
  3. 让它更具挑战性,并用以下内容替换原始示例:

    if(a != null && a.getFoo() != null && a.getFoo().getBar() != null){
        //...
    }
    
    Run Code Online (Sandbox Code Playgroud)

更新2:

我已经为Apache Commons Lang库创建了一个pull请求来修复这个差距:

这些将被纳入commons-lang,版本3.5:

  • anyNotNull (Object... values)
  • allNotNull (Object... values)

java null nullable

43
推荐指数
4
解决办法
3万
查看次数

Java 8偷看vs地图

我有以下案例:有一个对象列表 - ProductData包含几个字段:

public class ProductData
{
....
  private String name;
  private String xref;

  //getters
  //setters
}
Run Code Online (Sandbox Code Playgroud)

并且有API返回以下对象的列表:

public class RatingTableRow
{
  private String planName;
  private String planXref;
  private int fromAge;
  private int toAge;
  private int ratingRegion;

 //constructor
 //getters
 //setters

}
Run Code Online (Sandbox Code Playgroud)

但它返回具有空计划名称字段的对象,因为在提取此对象期间不允许这样做.我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置为RatingTableRow,因为我需要稍后使用此对象,因此我创建了以下代码来执行此操作:

Map<String, ProductData> productByXref = plans.stream()
        .collect(toMap(ProductData::getInternalCode, Function.identity()));

return getRatingTableRows(...).stream
        .filter(ratingRow -> productByXref.containsKey(ratingRow.getPlanXref()))
        .peek(row -> {
                ProductData product = productByXref.get(row.getPlanXref());
                row.setPlanName(product.getName());
        })....;
Run Code Online (Sandbox Code Playgroud)

我知道java文档说这peek不符合这些需求,但希望得到关于如何以更正确的方式完成此任务的建议.

java java-8

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

Fibonacci One-Liner

我正试图用Ruby单行解决Project Euler中的问题,我很好奇是否有更优雅的问题解决方案:

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的.从1和2开始,前10个术语将是:

1,2,3,5,8,13,21,34,55,89 ......

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和.

这是我在Ruby中的一行解决方案:

(1..32).inject([0,1]) {|arr, i| (arr << arr[-1] + arr[-2] if arr[-1] + arr[-2] <= 4000000) || arr}.inject(0) {|total, i| total += i.even? ? i : 0}
Run Code Online (Sandbox Code Playgroud)

我主要担心的是我只使用范围(1..32),因为我碰巧知道在Fibonacci序列中的数字开始超过4,000,000之前,这一切都是必要的.我希望不知怎的,它会以某种方式构建在单行中,但我无法弄明白.

不允许使用半冒号!

ruby fibonacci

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

无法将日期字符串解析为日期

我想将日期字符串解析为日期.我正在寻找其他一些问题,但我找不到答案.

String mail_delivered = "31.10.2013 17:57:58 CET";

try {
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z", Locale.GERMAN);
    Date result =  df.parse(mail_delivered);  
    System.out.println(result);
} catch (ParseException pe) {
    pe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

错误消息是java.text.ParseException:Unparseable date: "[31.10.2013 17:57:58 CET]"我不知道什么是错的.

你能帮我吗.提前致谢.


编辑:好的.我把它变成英语,但我仍然是同样的问题.我不想改变输入,因为它来自邮件数据库.还有其他想法吗?

String mail_delivered = "31.10.2013 17:57:58 CET";

try {
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z", Locale.ENGLISH);
    Date result =  df.parse(mail_delivered);  
    System.out.println(result);
} catch (ParseException pe) {
    pe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我发现了这个问题.我是瞎子.来自数据库的Sting [31.10.2013 17:57:58 CET]不是31.10.2013 17:57:58 CET

谢谢.

java time date

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

为什么ast.literal_eval('5*7')会失败?

为什么文字评估5 * 7失败,而5 + 7不是?

import ast

print(ast.literal_eval('5 + 7'))
# -> 12

print(ast.literal_eval('5 * 7'))
# -> 
Traceback (most recent call last):
  ...
ValueError: malformed node or string: <_ast.BinOp object at ...>
Run Code Online (Sandbox Code Playgroud)

文件没有解释这一点.

在SO上回答这个问题之后我发现了这个问题:得到一个字符串的结果.

python eval abstract-syntax-tree

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

静态成员中的通用参数声明

为什么不允许定义这样的静态成员:

private static final <T extends Object> Map<Class<T>, BiFunction<T, T, Boolean>> SPECIFIC_HANDLERS = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

相反,它只允许使用未指定的:

private static final Map<Class<?>, BiFunction<?, ?, Boolean>> SPECIFIC_HANDLERS = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

是否有一个解决方法,以便我可以定义BiFunction的两个参数必须是相同的类型,并且Map的键必须是这些参数的类类型?

更新以澄清(因为@Mena的建议不适合我):

我想要一个通用equals helper的数组equals方法的映射.通用助手正式接收两个对象.如果它们是数组,我必须将它传递给一个重载的Arrays.equals()方法.我想找到正确的方法(例1):

private static final Map<Class<?>, BiFunction<?, ?, Boolean>> ARRAY_EQUALS_HANDLER = new HashMap<>();

static
{
    ARRAY_EQUALS_HANDLER.put( Object[].class,  (l, r) -> Arrays.equals( (Object[])  l, (Object[])  r ));
    ARRAY_EQUALS_HANDLER.put( boolean[].class, (l, r) -> Arrays.equals( (boolean[]) l, (boolean[]) r ));
    ....
}
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

boolean equal = ARRAY_EQUALS_HANDLER.get( anObj1.getClass()).apply(anObj1, anObj2);
Run Code Online (Sandbox Code Playgroud)

该构造(根据Mena)甚至不编译:

private static <T extends …
Run Code Online (Sandbox Code Playgroud)

java generics

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

2 ^ n具有高级过滤功能的Itertools组合

我知道我可以使用itertools抽出组合,并定义组合组的大小,如下所示:

import itertools
print list(itertools.combinations(['V','M','T','O','Q','K','D','R'], 4))
Run Code Online (Sandbox Code Playgroud)

这个输出就像一个元组列表,在这种情况下长度为4.

从这里,我想要做的是强制执行2个参数 - 1)排除包含某些对的任何组合/元组 - 例如V和M,或者Q和K. 2)强制每个元组只包含1个实例一封信.我相信itertools已经在做#2了.

应该保留的只是那些不包含任何这些预定"假"对的元组.因此,如果我排除了包含V和M的组,则该组('V','M','Q','D')将无效,但是('V','R','Q','D')有效.

这对我来说最好的方法是什么?

python combinations permutation set

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

在java 8中不使用POJO进行分组

我有一个用例,我需要读取一个文件并获取序列的分组和与序列相关的值列表.文件中这些记录的格式类似于sequence-val,example

10-A
10-B
11-C
11-A
Run Code Online (Sandbox Code Playgroud)

我希望输出是一个map(Map<String,List<String>>),其中序列作为键,并将值列表与值相关联,如下所示

10,[A,B]
11,[C,A]
Run Code Online (Sandbox Code Playgroud)

有没有办法在不为这些记录创建POJO的情况下做到这一点?我一直在尝试探索Collectors.groupingBy我看到的基于创建POJO的大多数示例的用法.

我一直试图写这样的东西

Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return new Tuple2<>(cpcRec[0],cpcRec[1])
}).collect(Collectors.groupingBy(x->x.))
Run Code Online (Sandbox Code Playgroud)

要么

Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return Arrays.asList(cpcRec[0],cpcRec[1]);
}).collect(Collectors.groupingBy(x->(ArrayList<String>)x[0]));
Run Code Online (Sandbox Code Playgroud)

我无法提供功能groupingBy可能发生的任何密钥groupingBy,有没有办法做到这一点,还是我必须创建一个POJO使用groupingBy

java collections lambda java-8 java-stream

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

为什么我的for循环跳过列表中的元素?

我有一个整数列表,我通过for循环运行,以发现两个元素组合是否等于另一个变量t.所以如果t等于10并且我有一个整数列表: l = [1,2,3,4,5,8,9]那么该函数应该打印所有不同的数字组合(1,9),(2,8).

我觉得我差不多了,但是当我使用这个.pop()功能时,列表中发生了一些奇怪的事情.下面的代码用于显示需要计算的所有数字组合,但会跳过列表中的每个其他元素.

l = [1,2,5,8,13,15,26,38]
c = 10
for i in l:
    first = i
    l.pop(0)
    for x in l:
        second = x
        print(first,second)
Run Code Online (Sandbox Code Playgroud)

这是输出:

1 2
1 5
1 8
1 13
1 15
1 26
1 38
5 5
5 8
5 13
5 15
5 26
5 38
13 8
13 13
13 15
13 26
13 38
26 …
Run Code Online (Sandbox Code Playgroud)

python loops for-loop

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