`

yuguo21工具类之《多选状态位》

 
阅读更多

JAVA最科学的多状态记录

数据库当中一个表的字段越少效率越高,所有科学的利用一个字段,是我们势在必行的。下面是我开发的多状态,但字段记录法。非常实用。

以下是测试代码:

	@Test
	public void test(){
		List<String> status = new ArrayList<String>();
		status.add("数学");status.add("语文");status.add("物理");status.add("化学");status.add("政治");
		StatusBitUtil staBitUtil = StatusBitUtil.StatusBitUtilFactory(status);
		
		List<String> stax = new ArrayList<String>();
		stax.add("数学");stax.add("政治");
		int bitx = staBitUtil.getBit(stax);
		
		System.out.println(bitx);
		
		List<String> stay = staBitUtil.getStatus(bitx);
		
		for (String xVal : stay){
			System.out.println(xVal);
		}
		
	}

 

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;
/**
 * yuguo21工具类之《多选状态位》
 * QQ:80303857
 * @author solid
 *
 */
public class StatusBitUtil {

	private List<String> status = null;
	private Map<Integer,String> statusBitMap = new HashMap<Integer, String>();
	private int summation = 0;
	
	private StatusBitUtil (List<String> status){
		this.status = status;
		
		for (int i=0;i<status.size();i++){
			int offsetVal = 1<<i;
			summation += offsetVal;
			statusBitMap.put(offsetVal, status.get(i));
		}
	}
	
	/**
	 * 类生成器,请不要这样使用StatusBitUtil。StatusBitUtilFactory(someParm).someMedth(xx);
	 * 推荐	StatusBitUtil someBody = StatusBitUtil。StatusBitUtilFactory(someParm);
	 * 		someBody.someMedth(xx);
	 * @param status 所有状态
	 * @return
	 */
	public static StatusBitUtil StatusBitUtilFactory(List<String> status){
		return new StatusBitUtil(status);
	}
	
	/**
	 * 根据特定数值返回所对应的所有状态
	 * @param bitSum 状态值
	 * @return
	 */
	public List<String> getStatus(int bitSum){
		List<String> statusList = new ArrayList<String>();
		
		int [] allBit = toBinary(bitSum);
		for (int i=0;i<allBit.length;i++){
			int key = allBit[i];
			String val = statusBitMap.get(key);
			statusList.add(val);
		}
		
		return statusList;
	}
	
	/**
	 * 传递过来状态值(s>0),返回状态位(b>=0)
	 * @param status 状态值
	 * @return 返回0,并未找到对应状态位,大于0返回所有状态位和
	 */
	public int getBit(List<String> status){
		int retVal = 0;
		int i=0;
		for (String thisStatusVal : this.status){
			for (String statusVal : status){
				if (thisStatusVal.equals(statusVal)){
					int offsetVal = 1<<i;
					retVal += offsetVal;
				}
			}
			i++;
		}
		
		return retVal;
	}
	
	/**
	 * 最多可设置多少状态为
	 * @return 可设置状态为最大值
	 */
	public int maxStatusBit(){
		return Integer.SIZE;
	}
	
	/**
	 * 把二进制数按位拆分后的整数集合
	 * @param bit
	 * @return
	 */
	private int[] toBinary(int bit){
		String bin = Integer.toBinaryString(bit);
		char[] charBin = bin.toCharArray();
		int[] retVal = new int[trueVal(charBin)];
		/**
		 * i=迭代/位移,x=按位获取,y=设置最终数值
		 */
		for(int i=(charBin.length-1),x=0,y=0;i>-1;i--,x++){
			char tempC = charBin[x];
			int tempInt = new Integer(tempC+"");
			int bitBin = tempInt<<i;
			if (bitBin>0){
				retVal[y] = bitBin;
				y++;
			}
		}
		
		return retVal;
	}
	
	private int trueVal(char[] charBin){
		int retVal = 0;
		
		for (char bin : charBin){
			if (bin != '0'){
				retVal++;
			}
		}
		
		return retVal;
	}
	
	/**
	 * 全选所有状态位
	 * @return
	 */
	public int allStatus(){
		return this.summation;
	}
	
	/**
	 * 测试使用构造函数
	 */
	public StatusBitUtil (){}
	
	@Test
	public void test(){
		List<String> status = new ArrayList<String>();
		status.add("数学");status.add("语文");status.add("物理");status.add("化学");status.add("政治");
		StatusBitUtil staBitUtil = StatusBitUtil.StatusBitUtilFactory(status);
		
		List<String> stax = new ArrayList<String>();
		stax.add("数学");stax.add("政治");
		int bitx = staBitUtil.getBit(stax);
		
		System.out.println(bitx);
		
		List<String> stay = staBitUtil.getStatus(bitx);
		
		for (String xVal : stay){
			System.out.println(xVal);
		}
		
	}

}

 

 

 

 

分享到:
评论

相关推荐

    多选控件Spinner

    首先,我们要明白,Spinner控件本身不支持多选,因此我们需要扩展Spinner类并重写其内部方法。通常,我们会创建一个新的Adapter来处理多选行为。Adapter是Android中用于将数据与视图绑定的组件,我们可以自定义一个...

    【《报复》[法]雨果克里兹,阅读答案及考点】 报复 雨果克里兹.docx

    【《报复》[法]雨果克里兹,阅读答案及考点】 报复 雨果克里兹.docx

    雨果网家具品类出海指南.pdf

    【雨果网】家具品类出海指南.pdf【雨果网】家具品类出海指南.pdf【雨果网】家具品类出海指南.pdf【雨果网】家具品类出海指南.pdf【雨果网】家具品类出海指南.pdf【雨果网】家具品类出海指南.pdf【雨果网】家具品类...

    雨果叙事诗贫苦人.doc

    雨果叙事诗贫苦人.doc

    雨果天晴极速恢复

    1、极速恢复是瞬间恢复技术的开拓者,是由南京安悦科技(雨过天晴电脑保护系统公司)自主开发、自主管理、自主运营的一款主打软件。 2、和市场上同类软件功能对比如下: A、Ghost 备份速度太慢,备份文件占用空间大...

    初中语文文学讨论现当代文学我们还需要雨果

    雨果,这位法国文学巨匠,其作品不仅仅局限于一个时代,他的影响力穿越了时空的界限,为全球的读者提供了无尽的精神滋养。在现当代文学的讨论中,我们不仅回顾了雨果的文学成就,更深入探讨了他所传递的人文精神以及...

    [试论,雨果,人道主义]试论雨果的人道主义思想解读.docx

    维克多·雨果,作为19世纪法国文学的巨匠,不仅以其丰富的文学作品影响了世界,更以其深厚的人道主义思想成为一代思想家。他的作品,特别是代表作《九三年》,不仅是文学领域的经典,也是人道主义思想研究的重要文本...

    雨果名言.doc

    雨果名言.doc

    自定义Spinner控件

    - 为了保存用户的多选状态,可以在应用退出时将选中项保存到SharedPreferences或数据库中。 - 当应用重新启动时,读取这些数据并恢复 Spinner 的多选状态。 6. **适配不同的数据源**: - 自定义Adapter应能灵活...

    论悲惨世界中雨果的人道主义思想.doc

    【摘要】及【关键词】部分虽提及的是电影《悲惨世界》与雨果的人道主义思想,但实际内容更偏向于文学分析,因此这里主要探讨雨果在《悲惨世界》中展现的人道主义思想及其对善恶的理解。 维克多·雨果是19世纪法国...

    雨果的名言警句精选.doc

    【雨果的名言警句】是文学巨匠维克多·雨果的智慧结晶,这些语录揭示了人生、人性、梦想与道德等深刻主题。他的名言中蕴含着丰富的哲理,对于理解生活、追求理想以及面对困境都有着启发性的作用。 1. **梦想与现实*...

    从巴黎圣母院看雨果的人道主义.doc

    综上所述,从《巴黎圣母院》看雨果的人道主义,我们可以看到一位伟大的作家如何通过笔下的故事,传达对人性的深刻理解,对社会的深切关怀,以及对美好未来的不懈追求。雨果的人道主义不仅存在于他的文字中,更在于他...

    庄子美丑观与雨果美丑观对比分析

    雨果的美学观点关注社会底层的人民,并试图通过艺术表现形式,让人们认识到内在精神和心灵之美的重要性。 对比庄子和雨果的美丑观,我们可以发现他们对美的本质的看法存在着共通之处和差异。共通之处在于他们都从人...

    论《悲惨世界》中雨果的人道主义思想.doc

    雨果通过贾维尔的形象,批判了当时社会的冷酷无情,呼吁人们关注底层人民的生存状态。 三、“幸福世界”雨果的人道主义的思想 在雨果的笔下,尽管“悲惨世界”充满了苦难,但“幸福世界”的理想始终存在。雨果的...

    初中语文文摘历史雨果的“谎言”

    故事讲述了雨果与另一位著名作家巴尔扎克的交往。巴尔扎克去雨果家中做客,不慎打碎了雨果心爱的笔筒。然而,为了不让朋友感到愧疚,雨果却谎称那个笔筒只是一个普通的梨木赝品,实际上,笔筒是一个价值不菲的真品。...

    “鲁迅与雨果:跨时空对话”与中法文化交流.docx

    "鲁迅与雨果:跨时空对话"这一主题,揭示了两位文学巨匠——中国的鲁迅与法国的雨果之间跨越时空的文化交流与精神共鸣。鲁迅是中国现代文学的重要奠基人,他对法国文化,尤其是法国文学有着深厚的热爱。他在翻译雨果...

    浅谈雨果《悲惨世界》的人道主义思想.pdf

    雨果的人道主义思想是他文学创作的核心主题之一,通过他的作品,特别是《悲惨世界》,我们可以看到他对社会底层人民的同情、对资本主义社会的抨击和对人性的崇高追求。 二、雨果人道主义思想的三大主题 1. 对社会...

    雨果天晴免费序列号 638863-852848-782793

    在2013年春节前 638863-852848-782793 用此序列号可以终身使用 具体请上与过天晴官网查看

    [给雨果的一封信600]给雨果的一封信.docx

    [给雨果的一封信600]给雨果的一封信.docx

    从悲惨世界看雨果人道主义思想.doc

    【标题】: 从《悲惨世界》看雨果的人道主义思想 【描述】: 本文探讨了法国浪漫主义文学大师雨果在其著作《悲惨世界》中所体现的人道主义思想,通过分析作品中的人物与情节,揭示了雨果对于真、善、美的追求以及对...

Global site tag (gtag.js) - Google Analytics