小编Joh*_*ica的帖子

最后有时候会让我困惑

今天在大学时我们谈了一些try,catch并且finally.我对这两个例子感到困惑:

PrintWriter out = null;
try {
  out = new PrintWriter(...); // We open file here
} catch (Exception e) {
  e.printStackTrace();
} finally { // And we close it here
  out.close();
}
Run Code Online (Sandbox Code Playgroud)

关闭文件finally和我们只是这样做有什么区别:

PrintWriter out = null;
try {
  out = new PrintWriter(...); // We open file here
} catch (Exception e) {
  e.printStackTrace();
}
out.close();
Run Code Online (Sandbox Code Playgroud)

catch之后的这段代码将始终执行.

你能给我一些很好的例子来说明我们何时使用finally以及何时将代码放入catch之后的差异?我知道最终将永远执行,但程序也会在catch块之后继续运行.

java exception-handling exception finally try-catch

21
推荐指数
1
解决办法
3121
查看次数

用Java 8+对Map进行分区

我有一个Map<String, String>和一个List<String>.我想Map根据条件进行分区

foreach(map.key -> list.contains(map.key))
Run Code Online (Sandbox Code Playgroud)

并产生两个Map.最优雅的方式是什么?我在Java 11上,所以你可以在答案中抛出你想要的一切.

我现在要做的是:

map.entrySet()
   .stream()
   .collect(partitioningBy(e -> list.contains(o.getKey())));
Run Code Online (Sandbox Code Playgroud)

但这给了一个Map<Boolean, List<Entry<String, String>>>.

java java-stream

21
推荐指数
5
解决办法
2241
查看次数

按位求反后出现右移的意外结果

我期望下面的代码将输出,10因为它(~port)等于10100101 So,当我们右移它时,4得到的0000101010。但是输出是250!为什么?

int main()
{
    uint8_t port = 0x5a;
    uint8_t result_8 =  (~port) >> 4;
    //result_8 = result_8 >> 4;

    printf("%i", result_8);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

21
推荐指数
1
解决办法
789
查看次数

IEnumerable&lt;&gt; vs List&lt;&gt; 作为参数

一般来说IEnumerable<>,当我传入参数时,我倾向于使用作为类型。然而,根据 BenchmarkDotNet:

[Benchmark]
public void EnumeratingCollectionsBad()
{
    var list = new List<string>();
    for (int i = 0; i < 1000; i++)
    {
        Bad(list);
    }
}

[Benchmark]
public void EnumeratingCollectionsFixed()
{
    var list = new List<string>();
    for (int i = 0; i < 1000; i++)
    {
        Fixed(list);
    }
}

private static void Bad(IEnumerable<string> list)
{
    foreach (var item in list)
    {
    }
}

private static void Fixed(List<string> list)
{
    foreach (var item in list)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)
方法 工作 …

c# performance ienumerable benchmarking

21
推荐指数
1
解决办法
1333
查看次数

如何针对2个可能的值检查变量?

我有一个变量s,其中包含一个字母的字符串

s = 'a'
Run Code Online (Sandbox Code Playgroud)

根据该变量的值,我想返回不同的东西.到目前为止,我正在做一些事情:

if s == 'a' or s == 'b':
   return 1
elif s == 'c' or s == 'd':
   return 2
else: 
   return 3
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?一个更Pythonic的方式?或者这是最有效的?

以前,我错误地有这样的事情:

if s == 'a' or 'b':
   ...
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,对我来说相当愚蠢.

我知道条件赋值并试过这个:

return 1 if s == 'a' or s == 'b' ...
Run Code Online (Sandbox Code Playgroud)

我想我的问题是专门有一种方法可以将变量与两个值进行比较,而无需键入 something == something or something == something

python

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

列表的每个元素都是True布尔值

我知道

all(map(compare,new_subjects.values()))==True
Run Code Online (Sandbox Code Playgroud)

会告诉我列表中的每个元素是否为True.但是,如何判断除其中一个元素之外的每个元素是否为True?

python

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

我应该使用"非Javadoc"评论吗?

我实现了自己在接口中定义的方法.但是,当我尝试将Javadoc添加到此方法时,Eclipse给了我这样的注释:

/* (non-Javadoc)
 * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
 */
Run Code Online (Sandbox Code Playgroud)

实际上,我真的需要为这个方法添加一些注释.我该怎么办?

java javadoc

20
推荐指数
2
解决办法
9196
查看次数

从OrderedDict转换为列表

如何转换OrderedDict

OrderedDict([(73, 'Mocha My Day'), (77, 'Coffee Cafe'), (83, 'Flavour Fusion'), (85, 'Mexican Grill')])
Run Code Online (Sandbox Code Playgroud)

列表?

[(73, 'Mocha My Day'), (77, 'Coffee Cafe'), (83, 'Flavour Fusion'), (85, 'Mexican Grill')]
Run Code Online (Sandbox Code Playgroud)

谢谢!!

python

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

通过不同的父类来自同一基类的多重继承真的是一个问题吗?

我想在我的C++游戏引擎中实现一个继承层次结构,它与Java有一些类比:

  • 所有对象都继承自Object类,
  • 某些功能由接口提供.

只是一个类比,给了我一些好处(不是严格的1:1 Java:C++映射,这是不可能的).

通过"接口",我的意思是这里只有纯虚拟公共方法的类.我知道这不是一个严格而准确的定义.

所以我做了:

class Object{...};

/* interfaces */
class Nameable : public Object{...};
class Moveable : public Object{...};
class Moveable3D : public Moveable{...};
class Moveable2D : public Moveable{...};

class Model3D : public Moveable3D, public Nameable{...}
class Line3D : public Moveable3D{...}
class Level: public Nameable{...}
class PathSolver : public Object{...}
Run Code Online (Sandbox Code Playgroud)

如您所见,Model3D现在Object通过多种方式继承:

  • Moveable3D -> Moveable -> Object,
  • Nameable -> Object.

我在VS2013(VC++)中的编译器警告我.

这是一个问题吗?

如果是这样,如何解决它以获得更好的继承结构? …

c++ inheritance

20
推荐指数
2
解决办法
8434
查看次数

String.intern()的返回解释

考虑:

String s1 = new StringBuilder("Cattie").append(" & Doggie").toString();
System.out.println(s1.intern() == s1); // true why?
System.out.println(s1 == "Cattie & Doggie"); // true another why?

String s2 = new StringBuilder("ja").append("va").toString();
System.out.println(s2.intern() == s2); // false

String s3 = new String("Cattie & Doggie");
System.out.println(s3.intern() == s3); // false
System.out.println(s3 == "Cattie & Doggie"); // false
Run Code Online (Sandbox Code Playgroud)

我糊涂了,为什么它们是由不同产生的返回值String.intern()其中说:

调用intern方法时,如果池已经包含等于equals(Object)方法确定的此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。

特别是经过以下两个测试:

assertFalse("new String() should create a new instance", new String("jav") == "jav");
assertFalse("new StringBuilder() should create a new instance",
    new StringBuilder("jav").toString() == …
Run Code Online (Sandbox Code Playgroud)

java string-interning

20
推荐指数
1
解决办法
1702
查看次数