我有办法检查两个字符串的切除,这两个字符串都是逗号分隔的所有字符。
if(brauen[p] > 35){
m1 = "A, S";
}else if(brauen[p] <=35 && brauen[p]>20){
m1 = "T";
}else{
m1 = "W";
}
if(mund[p] > 50){
m2 = "S";
}else{
m2 = "T, W, E";
}
if(augen[p] > 25){
m3 = "A, S";
}else{
m3 = "T, V, E";
}
List<String> l1 = Arrays.asList(m1.split(","));
List<String> l2 = Arrays.asList(m2.split(","));
List<String> l3 = Arrays.asList(m3.split(","));
List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList());
resultString = String.join(",", result);
System.out.println(resultString);
代码在for循环中,遍历数组。
我现在不明白:如果我定义单个字符串(如上面三个列表的定义),就像这样:
String s1 = "T,V,E";
String s2 = "T,W,E";
然后它的工作和结果是T,E
,例外。
但是我提供的代码不起作用,我只得到字符串T
或结果为空字符串。
奇怪的是:l1
和l2
被正确定义,如果我只是在定义之后打印它们,值是正确的,交叉点应该是W
和{{1也是。
所以我真的找不到任何问题,如果我基本上定义了相同的字符串,就像我说的那样:
S
或
String s1 = "T,V,E";
String s2 = "T,W,E";
然后它的工作,但如果我使用从String s1 = "A,S";
String s2 = "S";
和m1
获取值的列表,它不起作用,虽然列表看起来完全相同。
有人可以帮帮我吗?
答案 0 :(得分:3)
只需将字母放入某个描述的Collection
(可以是List
,如果要放弃重复,可以是Set
:
Set<String> first = new LinkedHashSet<>(Arrays.asList(s1.split(","));
Set<String> second = new LinkedHashSet<>(Arrays.asList(s2.split(","));
然后只删除first
中不属于second
的所有元素(或另一种查看它的方式,仅保留first
中second
中的元素first.retainAll(second);
1}}):
String intersection = String.join(",", first);
现在再次加入他们:
Optional<VendorAddress> maybeAnAddress = vendorAddressList
.stream()
.filter(VendorAddress::isPrimary) // Note: I used a method reference here.
.findAny();
VendorAddress primaryAddress = maybeAnAddress.orElse(null);
答案 1 :(得分:1)
如果没有特定要求对数组使用for
循环,那么我将使用集合和库方法来实现这一点,例如:
String s1 = "T,V,E";
String s2 = "T,W,E";
List<String> list1 = new ArrayList<>(Arrays.asList(s1.split(",")));
List<String> list2 = new ArrayList<>(Arrays.asList(s2.split(",")));
list1.retainAll(list2);
System.out.println(String.join(",", list1));