在Java 8中,您可以使用方法引用来过滤流,例如:
Stream<String> s = ...;
long emptyStrings = s.filter(String::isEmpty).count();
Run Code Online (Sandbox Code Playgroud)
有没有办法创建一个方法引用,它是对现有方法的否定,即:
long nonEmptyStrings = s.filter(not(String::isEmpty)).count();
Run Code Online (Sandbox Code Playgroud)
我可以创建not
如下所示的方法,但我想知道JDK是否提供了类似的东西.
static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }
Run Code Online (Sandbox Code Playgroud) 我有两个包含数字的字符串,我想看看第二个字符串是否包含与第一个字符串相同的数字,无论它们是否有序.如果它有任何重复的数字而不是报告错误.除了使用.charAt()之外,在java中是否存在因为它在10之后不适用于数字?
String one = "1 2 3 4 5 ";
String two = " 3 2 1 4 5 ";
String three = "3 2 1 4 4 ";
Run Code Online (Sandbox Code Playgroud) 这困扰了我好几天.我只需要通过比较找出第二个xml中缺少的节点.我试过xmlunit,但它并没有真正帮助我找到丢失的节点,因为它逐行比较.两个样本xml如下:xml1:
<test testcase="101">
<value="1">
<value="2">
<value="3">
</test>
Run Code Online (Sandbox Code Playgroud)
XML2:
<test testcase="101">
<value="3">
<value="2">
</test>
Run Code Online (Sandbox Code Playgroud)
请注意,value = 3实际上在第二个副本中它只是到达第一个节点,但我仍然认为它没有丢失.我如何找到丢失的节点值="1"?
嗨,我是Java的新手,正在尝试我的集合部分,我有一个简单的查询,我有两个说出雇员对象的数组列表
class Employee
{
private int emp_id;
private String name;
private List<String> mobile_numbers;
//.....getters and setters
}
Run Code Online (Sandbox Code Playgroud)
说listA
并listB
拥有以下数据
List<Employee> listA = new ArrayList<Employee>();
List<Employee> listB = new ArrayList<Employee>();
listA.add(new Employee("101", "E1", listOfMobileNumbers));
listA.add(new Employee("102", "E2", listOfMobileNumbers1));
listA.add(new Employee("103", "E3", listOfMobileNumbers2));
listA.add(new Employee("104", "E4", listOfMobileNumber4));
listA.add(new Employee("105", "E5", listOfMobileNumbers5));
listB.add(new Employee("101", "E1", listOfMobileNumbers1));
listB.add(new Employee("102", "E2", listOfMobileNumbers2));
listB.add(new Employee("106", "E6", listOfMobileNumber6));
listB.add(new Employee("107", "E7", listOfMobileNumber7));
listB.add(new Employee("108", "E8", listOfMobileNumbers8));
Run Code Online (Sandbox Code Playgroud)
这里listOfMobileNumbers
是一个List<String>
现在,我想从个人列表中找到其他元素。即
List<Employee> additionalDataInListA = …
Run Code Online (Sandbox Code Playgroud) 我如何比较两个arraylists?
我有一个sdCoverList数组和thumbnailList数组.
02-04 11:05:05.210: I/System.out(4035): HASHED THUMBNAIL[-2122410790, 2043473787, 1914391068, 1785308349, 1656225630, 1527142911, 1398060192, 1268977473, 1139894754, 1010812035, 1242943301, 1113860582, 984777863, 855695144, 726612425, 597529706, 468446987, 339364268, 210281549]
02-04 11:05:05.210: I/System.out(4035): SD COVER LIST[-2122410790, 2043473787, 1914391068, 1785308349, 1268977473, 1656225630, 1527142911, 1139894754, 1398060192, 1010812035, 1242943301, 1113860582, 984777863, 855695144, 726612425, 597529706, 468446987, 339364268, 210281549, 717409028]
Run Code Online (Sandbox Code Playgroud)
在我的sd封面列表中,我有一个额外的值,我想删除,但首先我必须先与thumbnailList数组进行比较.如果两个都有相同的元素,不要做任何事情,但如果有额外的,将其从SD卡中删除.
我的阵列列表
对于sdCoverList:
// CHECK DIRECTORY BEFORE DELETING THEM
File strPath = new File(Environment.getExternalStorageDirectory() + folderName+"/Covers");
File yourDir = new File(strPath, "");
if(yourDir.length()!=0)
for (File f : yourDir.listFiles()) {
if …
Run Code Online (Sandbox Code Playgroud) 我有两个清单:
List x = [1, 2, 5, 7, 8];
List y = [1, 3, 4, 5];
Run Code Online (Sandbox Code Playgroud)
我试图获得以下计算的不对称差异:
x - y (what's in x that's not in y) => 2 7 8
y - x (what's in y that's not in x) => 3 4
Run Code Online (Sandbox Code Playgroud)
我正在尝试实现的正是guava的Sets.difference所提供的,除了我坚持使用Java 1.4(我很容易将我的实现从使用Lists更改为Sets)
使用Collection.removeAll/retainAll将是一个交易破坏者,因为这些方法就地工作.我在列表中保存的对象是一些实际映射到Hibernate的重POJOS.
底线是,是否有类似Java 1.4的Sets实用程序类?或者可以计算两个集合的不对称差异的东西?
java ×5
arraylist ×2
android ×1
asymmetric ×1
collections ×1
compare ×1
difference ×1
guava ×1
java-8 ×1
negate ×1
predicate ×1
set ×1
string ×1
xml ×1
xmlunit ×1