我有一个包含两个成员的类,以及该类的对象列表。现在,我想从对象列表中提取成员列表。
例如:
class student {
int Id;
String studentName;
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要从学生列表中检索一个StudentName列表。java8 Streams如何做到这一点?
不使用流的解决方案:
List<student> studentList;
List<String> nameList = new ArrayList<String>();
Iterator iterator = studentList.iterator();
while(iterator.hasNext()){
nameList.add(iterator.next().getStudentName());
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java列表执行敏感搜索stream().filter(...).
我的搜索功能工作正常但我没有设法实现这个工作没有区分大小写.我的函数看起来像这样:
public static List<License> searchByEverything(String keyword, String dealerid){
List<License> licenseDealerList = getLicensesByDealer(dealerid);
// org.apache.commons.lang3.StringUtils.containsIgnoreCase(keyword);
Predicate<License> licensePredicate = u -> u.name1.contains(keyword);
List<License> filteredList = licenseDealerList.stream().filter(licensePredicate).collect(Collectors.toList());
return filteredList;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到我试图使用apache commons库但我不知道如何将它包含在我的stream().filter(...).我研究了一些不同的方法,但并没有真正理解如何将它们中的任何一个实现到我的方法中.在我的情况下,从对象值的字符串值执行搜索并返回对象非常重要.
我知道我可以使用类似的东西matchAny()而不是filter()但我不明白如何将它作为一个对象返回.
提前致谢
我能以某种方式访问列表中对象的索引吗?
myList.stream().sorted((o1, o2) -> 0).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
例如:
我希望首先显示奇数索引,最后显示索引.
如何使用java 8流更新Map?至于现在我在做:
Map<String, Integer> testMap = Maps.newHashMap();
for(Map.Entry<String,Integer> testEntrySet : testCounts.entrySet()) {
String name = Utils.cleanName(testEntrySet.getKey());
if(testMap.containsKey(name)) {
testMap.put(name, testMap.get(name) +
testCounts.get(testEntrySet.getKey()));
} else {
testMap.put(name, testCounts.get(testEntrySet.getKey()));
}
}
return testMap;
}
Run Code Online (Sandbox Code Playgroud) 我有一个返回对象列表的函数.获取该列表后,我想将每个对象中的字段设置为相同的值.有没有办法可以将下面的三个(模拟)代码行减少到一个?
List<someObjects> aList = functionReturningList();
aList.stream().forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud) 注释掉Stream.concat时,createLazyStream按预期工作,仅在应用终端操作时初始化.
但是如果你取消注释Stream.concat行,那么你会看到即使没有实际使用也没有初始化两个流(没有应用终端操作)
这是java bug,对吧?什么是变通方法?
@Test
public void testConcat() {
Stream<Integer> stream = createLazyStream();
// Stream<Integer> result = Stream.concat(stream, createLazyStream());
}
private Stream<Integer> createLazyStream() {
return StreamSupport.stream(() -> {
System.out.println("initializing stream");
return IntStream.range(1,10).spliterator();
}, Spliterator.ORDERED, false);
}
Run Code Online (Sandbox Code Playgroud) 我有一个Stream<Student[]>对象,我需要收集List<Student>
如果我使用,obj.collect(Collectors.toList())那我就明白了List<Student[]>
有没有更好的方法来转换?
我有以下代码,并希望在将它们乘以我的10之后打印列表元素,但它表示不允许使用void.怎么解决?
List<Integer> integerList = Arrays.asList(10,22,30);
long muliplied = integerList.stream()
.map(e -> e*10)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 使用JUnit和Stream我有以下错误消息:
java.lang.IllegalStateException: stream has already been operated upon or closed
Run Code Online (Sandbox Code Playgroud)
我做了一个研究,可以明确的是没有可能重用流
但根据这篇文章:
使用Supplier是可以解决这个问题.
所以我目前的代码如下:
try (Stream<String> stream = Files.lines(Paths.get(fileName)) ) {
Supplier<Stream<String>> supplier = () -> stream;
logger.info("A");
logger.info("ABC {}", supplier.get().findFirst().get());
logger.info("B");
logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
logger.info("C");
assertThat(supplier.get().count(), is(1051));
}
catch (IOException e) {
logger.error("{}", e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
怎么可以看到我用的是supplier.get()与工作Stream(其与本教程根据),但@Test打印,直到乙,因此@Test在出现故障supplier.get().skip(1050).findFirst().get(),它仍产生相同的错误消息.
我的代码和教程之间的独特区别,mime通过文件工作,教程围绕数组工作.
有什么特别的编辑工作没有任何问题?
Α
我做了以下版本(根据Eugene的代码段)
try (Stream<String> stream …Run Code Online (Sandbox Code Playgroud) 流是否有缓存或优化相同的调用?
list.stream()
.filter(bean -> manager.find(bean.getID()).getApi() != null)
.peek(bean -> {
Entity entity = manager.find(bean.getID());
//... logic with entity here
}
});
Run Code Online (Sandbox Code Playgroud)
manager.find()迭代期间会调用多少次?你能提出更好的方法来实现这段代码吗?
java ×10
java-stream ×10
java-8 ×7
list ×2
foreach ×1
monads ×1
object ×1
optimization ×1
search ×1