Tag: java

将Java Stream过滤为1并且只有1个元素

我正在尝试使用Java 8 Stream来查找LinkedList元素。 但是,我想保证,过滤条件只有1个匹配。 拿这个代码: public static void main(String[] args) { LinkedList<User> users = new LinkedList<>(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -> user.getId() == 1).findAny().get(); System.out.println(match.toString()); } static class User { @Override public String toString() { return id + " – " + username; } int id; […]

从数组中删除元素(Java)

是否有任何快速(和好看)的方式从Java中的数组中删除元素?

从URL获取文件名

在Java中,给定一个java.net.URL或http://www.example.com/some/path/to/a/file.xmlforms的String ,获取文件名最简单的方法是什么,减去扩展名? 所以,在这个例子中,我正在寻找返回"file"东西。 我可以想到几种方法来做到这一点,但我正在寻找一些容易阅读和简短的东西。

如何简化无效的compareTo()实现?

我为像这样的简单类实现了compareTo()方法(能够使用Collections.sort()以及Java平台提供的其他好东西): public class Metadata implements Comparable<Metadata> { private String name; private String value; // Imagine basic constructor and accessors here // Irrelevant parts omitted } 我想这些对象的自然顺序是:1)按名称sorting,2)如果名称相同,则按值sorting; 这两个比较应该是不区分大小写的。 对于这两个字段,空值是完全可以接受的,所以在这种情况下, compareTo不能中断。 想到的解决scheme是沿着以下线(我在这里使用“守卫子句”,而其他人可能更喜欢单一的返回点,但这是旁边的点): // primarily by name, secondarily by value; null-safe; case-insensitive public int compareTo(Metadata other) { if (this.name == null && other.name != null){ return -1; } […]

威胁中的约束

我刚开始玩Guice,我能想到的一个用例是,在一个testing中我只想重载一个绑定。 我想我想使用其余的生产级别的绑定,以确保一切安装正确,并避免重复。 所以想象我有以下模块 public class ProductionModule implements Module { public void configure(Binder binder) { binder.bind(InterfaceA.class).to(ConcreteA.class); binder.bind(InterfaceB.class).to(ConcreteB.class); binder.bind(InterfaceC.class).to(ConcreteC.class); } } 而在我的testing中,我只想重写InterfaceC,同时保持InterfaceA和InterfaceB的机智,所以我想要的东西是这样的: Module testModule = new Module() { public void configure(Binder binder) { binder.bind(InterfaceC.class).to(MockC.class); } }; Guice.createInjector(new ProductionModule(), testModule); 我也尝试了以下,没有运气: Module testModule = new ProductionModule() { public void configure(Binder binder) { super.configure(binder); binder.bind(InterfaceC.class).to(MockC.class); } }; Guice.createInjector(testModule); 有谁知道是否有可能做我想要的,或者我完全吠叫错误的树? […]

为什么Java不允许Throwable的通用子类?

根据Java语言select第3版: 如果generics类是Throwable的直接或间接子类,那么这是一个编译时错误。 我想了解为什么做出这个决定。 genericsexception有什么问题? (据我所知,generics只是编译时语法糖,在.class文件中它们会被翻译成Object ,所以有效地声明一个generics类就好像它的一切都是一个Object 。我错了。)

JUnit与TestNG

在工作中,我们目前仍在使用JUnit 3来运行我们的testing。 我们一直在考虑切换到JUnit 4来编写新的testing,但是现在我一直在关注TestNG。 你们对JUnit 4或者TestNG有什么经验,而且对于大量的testing来说,它们似乎工作得更好? 编写testing的灵活性对于我们来说也很重要,因为我们的functiontesting涵盖了一个广泛的方面,需要用各种方式编写来获得结果。 旧的testing不会被重写,因为他们的工作很好。 我希望在新的testing中看到,testing的写法,自然断言,分组和易于分布的testing执行的灵活性。

如果方法的返回types是Void,我该返回什么? (不是空的!)

由于在Java中使用generics,我最终不得不实现一个具有Void作为返回types的函数: public Void doSomething() { //… } 编译器要求我返回一些东西 。 现在我只是返回null ,但我想知道如果这是好的编码习惯… 我也尝试过Void.class , void , Void.TYPE , new Void() ,根本没有任何回报,但所有这些都不起作用。 (或多或less显而易见的原因)(请参阅此答案的详细信息) 那么如果函数的返回types是Void我应该返回什么呢? 什么是Void类的一般用法? 编辑:只是为了节省您的downvotes:我问V oid,而不是v oid。 类Void , 而不是保留关键字void 。

什么是Kotlin的Java静态方法的等价物?

Kotlin中没有static关键字。 在Kotlin中表示static Java方法的最好方法是什么?

是否有必要分别closures每个嵌套的OutputStream和Writer?

我正在写一段代码: OutputStream outputStream = new FileOutputStream(createdFile); GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(gzipOutputStream)); 我是否需要closures每个stream或作者如下? gzipOutputStream.close(); bw.close(); outputStream.close(); 或者只是closures最后一个stream是好的? bw.close();