我正在使用此代码来检查HashMap中是否存在该数组.
public class Test {
public static void main(String[] arg) {
HashMap<int[], String> map = new HashMap<int[], String>();
map.put(new int[]{1, 2}, "sun");
System.out.println(map.containsKey((new int[]{1, 2})));
}
}
Run Code Online (Sandbox Code Playgroud)
但这打印错误.如何检查HashMap中是否存在该数组.提前致谢.
根据Java标准,short和char类型都使用2个字节,因此当我编写类似的东西时
char ch = 'c';
short s = ch;
Run Code Online (Sandbox Code Playgroud)
有一个错误说"可能会失去精确度".我在这里缺少什么
这是来自JDK的HashMap类的keySet()方法.为什么作者将字段(keySet)分配给局部变量ks?
public Set<K> keySet() {
Set<K> ks;
return (ks = keySet) == null ? (keySet = new KeySet()) : ks;
}
Run Code Online (Sandbox Code Playgroud)
上面和下面有什么区别?这与线程安全有关吗?
public Set<K> keySet() {
return (keySet == null ? (keySet = new KeySet()) : keySet;
}
Run Code Online (Sandbox Code Playgroud) 我试图用一个例子来理解这个干净的代码实践.考虑具有折扣开关案例的类产品.我试图用多态替换switch语句.
代码之前:
class Product {
String priceCode;
int discount;
Product(String priceCode) {
setDiscount(priceCode);
}
public int getDiscount() {
return discount;
}
public void setDiscount(String priceCode) {
switch (priceCode) {
case "CODE1":
discount = // some logic;
case "CODE2":
discount = // some other logic;
case "CODE3":
discount = // some other logic;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在下面的代码中你可以看到我删除了switch语句但是我仍然有条件来创建discountStrategy的对象.我的问题是,我仍然有条件,我试图删除多态性.
代码后:
class Product {
String priceCode;
DiscountStrategy discountStrategy;
Product(String priceCode) {
setDiscount(priceCode);
}
public int getDiscount() {
return discountStrategy.getDiscount();
}
public void setDiscount(String priceCode) …Run Code Online (Sandbox Code Playgroud) 我在主视图文件夹的layouts文件夹中有三个布局.我添加了一个名为subDomain的模块.在我的子域模块中,我有一个名为HomeController的Controller.在HomeController中有一个叫做的动作getDomain().
在getDomain()我想要将主要布局更改为的操作中getDomainLayout.但是当我使用代码时出错:
$this->layout = "getDomainLayout";
Yii2投掷:
Invalid Parameter – yii\base\InvalidParamException
The view file does not exist: \myyii2\modules\subDomain\views\layouts\bersih.php
Run Code Online (Sandbox Code Playgroud) 使用非并发数据结构源流的非干扰要求是否意味着在执行流管道期间我们无法更改数据结构元素的状态(除此之外我们无法更改源数据结构本身)?(问题1)
在关于非干扰的部分中,在流包描述中,它说:"对于大多数数据源,防止干扰意味着确保在流管道的执行期间根本不修改数据源."
这篇文章没有提到修改元素的状态?
例如,假设"形状"是非线程安全的集合(例如ArrayList),下面的代码是否被认为有干扰?(问题2)
shapes.stream()
.filter(s -> s.getColor() == BLUE)
.forEach(s -> s.setColor(RED));
Run Code Online (Sandbox Code Playgroud)
这个例子取自可靠的来源(至少可以说),所以它应该是正确的.但是,如果我改变stream()了parallelStream(),它仍然是安全和正确的吗?(问题3)
另一方面,另一个可靠来源Naftalin Maurice的"掌握Lambdas"清楚地表明,通过管道操作改变元素的状态(值)确实是干扰.从关于不干涉的部分(3.2.3):
"但是流的规则禁止对流源进行任何修改 - 包括,例如,通过任何线程更改元素的值,而不仅仅是管道操作."
如果书中所说的是正确的,是否意味着我们不能使用Stream API来修改元素的状态(使用forEach),并且必须使用常规迭代器(或for-each,或Iterable.forEach)来做到这一点?(问题4)
它是null对Object类型?
class C {
int i;
String s;
public C() {}
}
Run Code Online (Sandbox Code Playgroud)
会s永远null吗?
简单类型怎么样int?那会是什么?零或任意值?
方法中的局部变量怎么样?
public void meth() {
int i;
}
Run Code Online (Sandbox Code Playgroud)
什么是酉值i?
然而,依赖于这样的默认值通常被认为是糟糕的编程风格.
好的,你建议我们做什么?
class A {
String s = "";
int i = 0;
}
Run Code Online (Sandbox Code Playgroud)
要么:
class A {
String s;
int i;
public A() {
// default constructor
s = "";
i = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个更好?为什么?
有一个有n个帖子的围栏,每个帖子都可以涂上一种k颜色.您必须绘制所有帖子,使得不超过两个相邻的栅栏柱具有相同的颜色.返回可以绘制栅栏的总方式.
diff - 具有不同颜色的组合的数量,
相同 - 具有相同颜色的组合的数量,
n - 发布的数量,
k - 颜色的数量.
对于n = 1:
diff = k;
same = 0;
Run Code Online (Sandbox Code Playgroud)
对于n = 2:
diff = k * (k - 1);
same = k;
Run Code Online (Sandbox Code Playgroud)
对于n = 3:
diff = (k + k * (k - 1)) * (k - 1);
same = k * (k - 1);
Run Code Online (Sandbox Code Playgroud)
最后的公式是:
diff[i] = (diff[i - 1] + diff[i - 2]) * (k - 1);
same[i] = diff[i - …Run Code Online (Sandbox Code Playgroud) 我在Utils类中有以下可用方法:
protected <U> U withTx(Function<OrientGraph, U> fc) {
// do something with the function
}
protected void withTx(Consumer<OrientGraph> consumer) {
withTx(g -> {
consumer.accept(g);
return null;
});
}
Run Code Online (Sandbox Code Playgroud)
在myClass我的方法中:
withTx(g -> anotherMethod(g));
Run Code Online (Sandbox Code Playgroud)
第二段代码有一个编译错误:
The method withTx(Function<OrientGraph, Object>) is ambiguous for the type myClass
我想这来自编译器,它无法确定lambda是a Consumer还是a Function.是否有一种消除歧视这种情况的高尚方式?
无论方法anotherMethod返回什么(void,Object什么),我都不想使用这个返回值.
一种解决方案是:
withTx(g -> { anotherMethod(g); });
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的东西,因为这会触发SonarLint.
如何使用Reduce操作在对象的两个字段上执行求和.
例如
class Pojo
{
public Pojo(int a, int b) {
super();
this.a = a;
this.b = b;
}
int a ;
int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
Pojo object1 = new Pojo(1, 1);
Pojo object2 = new Pojo(2, 2);
Pojo object3 = new Pojo(3, 3);
Pojo object4 = new Pojo(4, …Run Code Online (Sandbox Code Playgroud)