-
2017-04-12 11:46:14
目录
介绍——Java 8
第一部分——Java中的Lambda表达式
第二部分——默认方法
第三部分——批量数据操作
总结——TL;DR
介绍——Java 8
Java 8 的发布实在是让人期待已久,虽然在这一过程中发布delay了些时日,很多人相信他们的等待是值得的。
主要因为有三个新增的地方:【Lambda表达式】、【默认方法】和【批量数据操作】。
如果你是第一次听说这些名词,请到Project Lambda查看在java8中即将到来的话题和java开发者最期待的功能。
驱动lambda特性产生的原因是什么呢?是硬件向着多核发展的趋势。芯片设计在遇到瓶颈后走向了并行设计,而软件开发人员必须找到一个更好的方式来利用底层硬件的功能。对于应用开发者来说,尤其是java开发者,需要简单可并行库来让程序更加有效率。从集合并行化就能明显看出这一改进的开始。事实证明,lambda表达式在提高代码可读性和语言表现上非同凡响。
还没认识java8前,我们可能这样写代码:
List persons = asList(new Person("Joe"), new Person("Jim"), new Person("John")); for(Person person : persons) { doSomething(person); }
而今,我们可以用更简洁的方式描述相同的操作:
所有加入java8的 新特性都涉及多核编程和并发库。List persons = asList(new Person("Joe"), new Person("Jim"), new Person("John")); persons.forEach(this::doSomething);
接下来将介绍三大特性:
Lambda表达式:lambda语法,SAM类型,函数式接口
默认方法:是什么,为什么吗,怎么做
批量数据操作:新的方式进行数据处理
如果你想查看Java 8的源码,请访问http://jdk8.java.net
第一部分——Java中的Lambda表达式
更多相关内容 -
如何自己写一个lambda方法来完成多线程批量处理数据
2020-10-23 23:04:44最近要做一个初始版的数据仓库项目,有一大批的MYSQL基础数据要通过整合后写入到ES,有部分数据量非常庞大,单线程批量写入会耗时很久,就想到了使用线程池来多线程做写入操作。 这个写法不要局限于我这个应用场景...最近要做一个初始版的数据仓库项目,有一大批的MYSQL基础数据要通过整合后写入到ES,有部分数据量非常庞大,单线程批量写入会耗时很久,就想到了使用线程池来多线程做写入操作。
这个写法不要局限于我这个应用场景,别的应用场景也可以修改一下里面的逻辑。
java版本要求在 1.8以上
附代码:
import org.apache.commons.collections.CollectionUtils; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 批量多线程执行写入任务 */ public class BatchThreadSave { /** * 批量多线程执行写入任务 * @param action 返回的截取数据表 自行写操作方法 * @param dataList 总数据表 * @param threadCount 需要的线程总数 0 < threadCount < 11 * @param <F> 指定数据表泛型 */ public static <F> void save(Executor<? super List<F>> action, List<F> dataList, int threadCount) { if (CollectionUtils.isEmpty(dataList)) { return; } if (threadCount < 1 || threadCount > 10) { return; } int threadSize = dataList.size() / (threadCount - 1); // 总数据条数 int dataSize = dataList.size(); // 分段数 int threadNum = dataSize / threadSize + 1; // 创建一个线程池 ExecutorService exec = Executors.newFixedThreadPool(threadCount); // 定义一个任务集合 List<F> cutList = null; // 确定每条线程的数据 try { for (int i = 0; i < threadNum; i++) { if (i == threadNum - 1) { cutList = dataList.subList(threadSize * i, dataSize); } else { cutList = dataList.subList(threadSize * i, threadSize * (i + 1)); } List<F> finalCutList = cutList; exec.execute(() -> { action.runAction(finalCutList); }); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭线程池 exec.shutdown(); } } public interface Executor<T extends List> { void runAction(T t); } }
那该怎么用呢?
public void buildUserIndex() { List<User> users = userMapper.findAll(); log.info("共获取到用户:" + users.size()); BatchThreadSave.save(finalCutList -> { int j = 0; for (User user : finalCutList) { j++; log.info(Thread.currentThread().getName() + " 当前执行到" + user.getId() + " 剩余:" + (finalCutList.size() - j)); //finalCutList 这里就是被截取后的数据, 只管写后面的实现 //这里执行你的业务逻辑就行了 比如保存 数据处理等等 } }, users, 10); }
-
Pyecharts可视化显示Pandas数据时为空值的解决方法:用lambda函数批量修改pandas数据类型
2021-05-13 18:34:30后来就弄了一个for循环,循环每1行,然后对每一行使用.apply()方法调用lambda函数进行转换,数据就正常显示,虽然用循环感觉比较笨,但还是开心,解决了问题。毕竟现在电脑配置那么高,不太需要考虑程序效率,能把...我有一个应用,需要使用pandas去mysql数据库里用pd. read_sql方法读取数据,进行一定处理后通过数据可视化组件Pyecharts在网页上进行可视化展示,图形为折线图,在显示时发现有些系列(series)的值不显示,查看pyecharts网页端的JavaScript脚本代码,发现Series的值都显示为null,后来查了资料,发现是pandas的数值类型有些跟pyecharts不兼容,pyecharts官网是这么说的:
Note: 在使用 Pandas&Numpy 时,请确保将数值类型转换为 python 原生的 int/float。比如整数类型请确保为 int,而不是 numpy.int32
在网上查了很多资料,比如直接使用df.astype(‘int’)对整个数据表进行转换,或者编写自定义函数然后调用df.apply()方法,都是报错,因为我的pandas原始数据里面有int,object等不同的数据类型,不能直接转换。后来就弄了一个for循环,循环每1行,然后对每一行使用.apply()方法调用lambda函数进行转换,数据就正常显示,虽然用循环感觉比较笨,但还是开心,解决了问题。毕竟现在电脑配置那么高,不太需要考虑程序效率,能把问题解决就行了。
核心代码如下:
#从数据库读取数据 df=pd.read_sql(sql=sql,con=conn,index_col="日期",coerce_float=False) #折线图 line = Line(init_opts=opts.InitOpts(width="1200px",height = "600px")) line.add_xaxis(df.columns.tolist()) #一定要加tolist()方法,不然会没有任何内容。 #设置Y轴反转,X轴朝下,不用对其零值 yaxis_opts=opts.AxisOpts(is_inverse= True,is_show=True,axisline_opts=opts.AxisLineOpts(is_on_zero=False))) for i in range(0,df.shape[0],1): #轮循df里的所有行,添加到折线图。 series_name = df.iloc[i].name #系列名称 y_axis_value=df.iloc[i].apply(lambda x: x.astype('float') if x is not None else x) #这里把所有非空值强行转换为float line.add_yaxis(series_name=series_name, y_axis=y_axis_value,label_opts=opts.LabelOpts(is_show=True), linestyle_opts=opts.LineStyleOpts(width=2),) #添加Y轴数据
-
【亲测有效】C# 使用lambda表达式修改集合的某个属性、字段的值
2022-07-08 16:34:20我们经常需要对一个集合做一些自定义的修改,而C#又不允许使用foreach或者for修改集合内容,那么下面我介绍三种方式实现修改集合的某个属性、字段的值,用起来简洁方便,亲测有效。下面有实体类SelectOption 实现的...【亲测有效】C# 使用lambda表达式修改集合的某个属性、字段的值
前言:我们通常在开发的时候会面对各种需求,而我们又喜欢写代码的时候可以简洁、高雅、高效率。lambda表达式的出现正好能够帮助我们减少了一定的代码量,提高写代码的效率。
正文:
我们经常需要对一个集合做一些自定义的修改,而C#又不允许使用foreach或者for修改集合内容,那么下面我介绍三种方式实现修改集合的某个属性、字段的值,用起来简洁方便,亲测有效。下面有实体类SelectOption
public class SelectOption { public string Title { get;set; } public object Value { get;set; } }
实现的关键代码:
//实例化泛型集合 List<SelectOption> selectOptions = new List<SelectOption>(); //加入测试数据1 selectOptions.Add(new SelectOption() { Title = "标题1", Value = "001" }); //加入测试数据2 selectOptions.Add(new SelectOption() { Title = "标题2", Value = "002" }); //第一种方式,使用Select selectOptions = selectOptions.Select(c => { c.Title = "测试:" + c.Title; return c; }).ToList(); //第二种方式,使用ForEach selectOptions.ForEach(item => { item.Title = "测试:" + item.Title; }); //第三种方式,使用FindAll selectOptions = selectOptions.FindAll(delegate(SelectOption obj) { obj.Title = "测试:" + obj.Title; return obj != null; });
总结:三种实现方式都是可以在方法体里面加入逻辑判断代码,看个人喜好使用哪一种方式都行。
写完收工。
-
每日10行代码159:批量修改多个excel文件的列名
2022-03-27 23:04:54背景:接上一章,进一步增强功能,实现批量处理的功能。 import openpyxl import os # 定义一个字典 my_dict = {'dth1':'代替换1' ,'dth2':'代替换2' ,'dth3':'代替换3' } def change_column_name(path,my... -
Java通过lambda表达式修改List对象中的属性。
2020-03-18 10:26:45public class testDemo { public List objectTest(){ List deployVOList = new ArrayList<>(); for(int i=0; i<5; i++){ DeployVO deployVO = new DeployVO();...deployVO.setDeployId(“1”+i);... -
用lambda表达式替代 for循环进行批量操作。
2014-11-09 00:46:00IEnumerable<Rect> rectlist3 = rectlist.Select(rect =>newRect(rect.X + 2000, rect.Y, rect.rect.Width, rect.rect.Height)); 转载于:https://www.cnblogs.com/gaoxianzhi/p/4084328.html -
求问大神批量Update语句怎么转成EF lambda表达式 谢谢!
2021-02-09 08:58:12例: 一张名为test的表,表中有Id,Name两个字段,我要通过Id对应去修改Name值,下面这条sql语句能转吗?谢谢 UPDATE test SET name = CASE id WHEN 1 THEN 'Name1' WHEN 2 THEN 'Name2' WHEN 3 THEN 'Name3' END ... -
mybatis使用lamda风格的批量更新(^_^)
2019-02-14 16:08:54mybatis批量操作 常用的做法如下代码所示: // UserDao.java /** * 批量插入 */ int batchInsert(@Param("users") List<User> users); // UserDao.xml <insert id="batch... -
python批量修改文件名
2022-06-12 01:45:54二、python批量修改文件名(按顺序) 1.源码 提示:使用os.listdir出现乱序,即修改文件名的时候不按照文件排列的顺序,例如os.listdir排列的顺序是按照例如:1,10,11,2,20,21…的顺序,想得到的正常顺序:1,2,... -
java基础 浅解1.8新增lambda表达式
2020-09-28 17:33:29lambda是java1.8的一个新特性,可以简化一些代码 lambda 表达式的语法格式如下: (parameters) -> expression 或 (parameters) ->{ statements; } 理解lambda之前我们首先应该理解一个什么叫做函数式接口。 ... -
C#使用lambda修改List集合中的元素信息
2020-09-23 15:51:52var list2 = list.Select(x => { x.Info = x.Info.Trim(new char[] { ':', ':' }); return x; }).ToList(); 注意有{}: x => { x.Info = x.Info.Trim(new char[] { ':', ':' }); return x;... -
测试(批量)更新与(批量)插入
2021-11-13 22:12:18文章目录更新新增 更新 mybatis-plus更新: ...批量更新,service层 继承 ServiceImpl ,其中的 updateBatchById 是批量更新(它里面还是一条一条更新)。 LambdaQueryWrapper<User> wrapper = new LambdaQueryWr -
LambdaUpdateWrapper 批量删除
2022-03-17 09:09:58LambdaUpdateWrapper 批量删除 -
Lambda表达式和Java集合框架
2020-08-31 04:55:52本文主要介绍了Lambda表达式和Java集合框架的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧 -
linux批量修改文件中包含字符串的查找替换
2021-05-18 06:14:01复旦大学2015--2016学年第二学期(15级)高等代数II期末考试第六大题解答六.(本题10分) 设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(g(\lambda)),g'(\lambda))= ...... -
linux VI模式下批量修改文件内容
2021-05-12 00:58:25Linux下批量修改文件及文件夹所有者及权限 Linux下批量修改文件及文件夹所有者及权限需要使用到两个命令,chmod以及chown 例:对/opt/Oracle/目录下的所有文件与子目录执行相同的权限变更: chmod -R 700 /opt ...... -
Lambda 表达式详解~Lambda与集合
2022-02-20 11:43:54为引入Lambda表达式,Java8新增了java.util.funcion包,里面包含常用的函数接口,这是Lambda表达式的基础,Java集合框架也新增部分接口,以便与Lambda表达式对接。 首先回顾一下Java集合框架的接口继承结构: 上... -
Java8新特性之lambda的作用_动力节点Java学院整理
2020-08-30 07:48:15我们期待了很久lambda为java带来闭包的概念,但是如果我们不在...现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析Java集合里面的批量数据操作解开lambda最强作用的神秘面纱。 -
【读者群答疑】批量修改dataframe的列名
2022-05-05 20:25:07比较下面批量修改dataframe列名的两种方式: >>> import pandas as pd 第1种方式: >>> df = pd.DataFrame({'Weight':[45, 88, 56, 15, 71], 'Name':['Sam', 'Andrea', 'Alex', 'Robin', 'Kia'],... -
Lambda表达式
2022-05-02 14:14:16一、Lambda初识 我们知道,在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢?那还可以使用匿名类的方式,如下: public class JavaTest { public static void ... -
kotlin学习笔记——Lambda表达式
2022-03-23 15:04:51直白的说,Lambda就是一小段可以作为参数传递的代码。 一般向某个函数传参都只能是变量,而Lambda可以传一段代码。 类似python中的map、reduce函数,允许传入Lambda表达式,ketlin的集合中也有很多类似的函数式API ... -
快速入门Java中的Lambda表达式
2020-09-01 20:54:52Lambda作为函数式编程中的基础部分,在其他编程语言中早就广为使用,但在Java领域中发展较慢,直到java8,才开始支持Lambda。网上关于Lambda的教程很多,今天小编给大家分享一篇快速入手Lambda的教程。 -
pandas批量修改列值_pandas速查手册
2020-11-20 00:08:31'one'):用‘one’代替所有等于1的值 s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3 df.rename(columns=lambda x: x + 1):批量更改列名 df.rename(columns={'old_name': 'new_ name'}):选择性... -
常用lambda操作整理(Java)
2022-07-25 14:12:23常用的lambda操作,包括list转list,list转map,过滤,排序等操作 -
python按顺序批量修改文件名
2021-06-10 10:46:07在之前批量修改文件名的时候出现的问题是使用os.listdir出现乱序,即修改文件名的时候不按照文件排列的顺序,导致了不必要的麻烦。 os.listdir排列的顺序是按照例如:1,10,11,2,20,21…的顺序 想达到的正常顺序... -
Java8新特性lambda表达式有什么用(用法实例)
2020-09-04 10:40:51主要介绍了Java8新特性lambda表达式有什么用,着重以实例讲解lambda表达式,需要的朋友可以参考下 -
python批量处理应用
2021-12-07 16:40:34一、python批量修改文件名 提示:待修改的文件夹下只能包含需要修改的文件,然后更改源码里面的路径即可。 代码如下(示例): #批量修改文件名 #批量修改图片文件名 import os import re import sys def renameall... -
海量数据实时更新太慢?Lambda架构大法好!
2020-12-29 08:52:39本文将主要介绍如何利用Lambda架构来跟踪数据实时更新的项目实现,以一个新闻服务功能为例。当前股票市场的交易者可以了解丰富的股票交易信息。从金融新闻到传统的报纸和杂志再到博客和社交媒体,汇聚着海量的数据,...