小编Lin*_*ica的帖子

为什么 Java 的 double/float Math.min() 是这样实现的?

我正在查看 的源代码中的一些内容java.lang.Math,我注意到 while Math.min(int, int)(或其长版本)是这样实现的:

public static int min(int a, int b) {
   return a <= b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

这对我来说完全有意义,这和我要做的一样。但是,双/浮点实现是这样的:

public static float min(float a, float b) {
   if (a != a) {
      return a;
   } else if (a == 0.0F && b == 0.0F && (long)Float.floatToRawIntBits(b) == negativeZeroFloatBits) {
      return b;
   } else {
      return a <= b ? a : b;
   }
}
Run Code Online (Sandbox Code Playgroud)

我完全傻眼了。相比a于自己?第二次检查是为了什么?为什么它的实现方式与 int/long 版本不同?

java floating-point

70
推荐指数
4
解决办法
5070
查看次数

Uses of T extends U?

Lately I encountered a method defined similar to this and I don't exactly understand its usage:

public static <T, U extends T> T foo(U u) { ... }
Run Code Online (Sandbox Code Playgroud)

A sample use could be like this:

// Baz is just the containing class of foo()
Number n = Baz.foo(1);
Run Code Online (Sandbox Code Playgroud)

Where T is inferred to Number and U (probably) to Integer. But I can't wrap my head around when this is superior to e.g. this method definition:

public static <T> T …
Run Code Online (Sandbox Code Playgroud)

java generics

17
推荐指数
1
解决办法
1186
查看次数

如何使流减少线程安全?

Java 流 API 提供了一种通用.reduce(identity, accumulator)方法。

从 javadocs 中可以清楚地看出累加器应该是一个无状态函数。

但是,我有一个关于identity对象的问题,即它应该是线程安全的吗?

假设 anidentity是一个 java 对象,并且 anaccumulator以修改不是原子的方式修改该对象,例如accumulator查看identity's状态,然后决定如何准确地修改它的内部状态。很明显,可能会同时运行多个 reduce 操作。在这种情况下,会出现几个问题:

  • 这个减少操作应该在identity对象范围内是原子的吗?
  • 仅仅让identity对象不可变并在每次减少时返回一个新实例就足够了吗?

java multithreading java-stream

17
推荐指数
2
解决办法
415
查看次数

无限IntStream的长度?

我已经创建了一个randomIntStream:

 final static PrimitiveIterator.OfInt startValue = new Random().ints(0, 60).iterator();
Run Code Online (Sandbox Code Playgroud)

文档说这个流实际上是无穷无尽的.

我想了解背景中发生了什么.

ints(0,60)正在生成无限的整数流.如果这是无限的,为什么我的机器没有泄漏任何内存?

我想知道,实际上生成了多少个数字,以及这个实现是否会在流仍然结束时导致错误?或者这个流会不断地在飞行中充满新的整数,它真的永远不会结束吗?

如果我已经提出这个问题,那么现在生成随机数的最佳做法是什么?

java random java-stream

16
推荐指数
3
解决办法
1552
查看次数

Selenium - 通过URL进行基本身份验证

在我的Selenium-Test(有chromedriver-2.24)中,我试图通过基本身份验证访问我的网页,并使用以下语句:

WebDriver driver  = ...;
driver.get("http://admin:admin@localhost:8080/project/");
Run Code Online (Sandbox Code Playgroud)

但谷歌Chrome在控制台中给出了以下警告:

[弃用]其URL包含嵌入凭据(例如https://user:pass@host/)的子资源请求被阻止.有关详细信息,请参阅https://www.chromestatus.com/feature/5669008342777856.

在标记的链接中提到支持被删除:

在子资源请求中删除对嵌入式凭据的支持.(已删除)

我现在的问题是,还有另一种从Selenium进行基本身份验证的方法吗?

注意:这没有帮助:如何使用Java处理Selenium Webdriver中的HTTP Basic Auth头?

java selenium google-chrome basic-authentication selenium-webdriver

7
推荐指数
2
解决办法
9035
查看次数

Java流和列表列表

出于某种原因,我无法解决如何使用流将这个深层嵌套列表转换为新列表的问题.

   every A in List<A> contains -> 
   List<B> where every B contains -> 
   List<C> where every C contains -> List<String>
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的迭代,如:

  List<String> newlist =  listA.getB()
                   .stream()
                   .filter(b -> b.getC()
                   .stream()
                   .filter(c -> c.getPeople)
                   .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

我充满了困惑......我可以通过for循环轻松完成这项工作,但我听说流简单易用,我想开始更多地使用它们.

java java-stream

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

树形图使用compareTo代替containsKey()的equals

我尝试使用的containsKey方法TreeMap,但是以某种方式我遇到了问题。

存储在树形图中的对象的定义与equals()不会产生相同的结果compareTo()。这是有意的。

但是,的文档java.util.Map说:

如果此映射包含指定键的映射,则返回true。更正式地说,当且仅当此映射包含键k的映射(例如)时,才返回true (key==null ? k==null : key.equals(k))。(最多可以有一个这样的映射。)

因此,我尝试了以下操作:

c = someModifiedObject();
boolean t1 = sm.containsKey(c);
someObject c2 = new someObject();
boolean t2 = sm.containsKey(c2);
boolean t3 = c.equals(new Chain());
int t4 = c.compareTo(new Chain());
Run Code Online (Sandbox Code Playgroud)

t1为true,因为对象位于树形图中。t3为true,因为t1等于t3(对于更改equals()运算符而言)t4为false,但是,t2也为false。似乎TreeMap使用compareTo()而不是equals()确定对象是否存在。

是否有排序映射的另一种实现,可以equals()用来检查对象是否存在?

java equals treemap compareto

5
推荐指数
1
解决办法
3489
查看次数

java中向json节点添加新的键值

我有 JSON 文件:

{
   "id":1,
   "name":"abc",
   "addressDetails":
      {
        "City":"NewYork"
      }
}
Run Code Online (Sandbox Code Playgroud)

我想向节点“addressDetails”添加一个键值(“pinCode”:“414141”)。

我尝试使用:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("D://test.json"));
ObjectNode node = mapper.createObjectNode();
node.with("addressDetails").put("pinCode", "414141"); 
Run Code Online (Sandbox Code Playgroud)

但它没有被添加,有什么办法可以做到这一点吗?

java json

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

Java 8 Streams:将对象列表转换为一组对象

我正在尝试将对象列表转换为一组对象,以确保集合中不存在重复项。我正在尝试使用 Streams。

我有一个类产品如下:

class Product{  
int id;  
String name;  
float price;  
public Product(int id, String name, float price) {  
    this.id = id;  
    this.name = name;  
    this.price = price;  
}  
 public String getName()
 {
     return this.name;
 }
 public int getId()
 {
     return this.id;

 }
 public float getPrice()
 {
     return this.price;
 }
 public void setName(String name)
 {
     this.name = name;
 }
 public void setId(int id)
 {
     this.id = id;
 }
 public void getPrice(float price)
 {
     this.price = price;
 }
}  
Run Code Online (Sandbox Code Playgroud)

我正在尝试类似的东西:

   List<Product> …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Java 8 One Stream到多个地图

可以说我有大量的网络服务器日志文件,不适合内存.我需要将此文件传输到mapreduce方法并保存到数据库.我这样做是使用Java 8 stream api.例如,我在mapreduce进程之后得到一个列表,例如,客户端消费,ip消费,内容消费.但是,我的需求并不像我的例子中那样.由于我不能共享代码,我只想给出基本的例子.

通过Java 8 Stream Api,我想要一次读取文件,同时获取3个列表,而我是流式文件,并行或顺序.但并行会很好.有没有办法做到这一点?

java java-8 java-stream

5
推荐指数
2
解决办法
974
查看次数